Получите время с yyyy-MM-dd 00:00:00 +0000 [duplicate]

Программирование на интерфейс абсолютно не связано с абстрактными интерфейсами, как мы видим на Java или .NET. Это даже не концепция ООП.

На самом деле это не значит, что вы не обходитесь с внутренними элементами объекта или структуры данных. Используйте интерфейс абстрактной программы или API для взаимодействия с вашими данными. В Java или C # это означает использование общедоступных свойств и методов вместо необработанного доступа к полям. Для C это означает использование функций вместо необработанных указателей.

EDIT: И с базами данных это означает использование представлений и хранимых процедур вместо прямого доступа к таблице.

0
задан Kirsteins 10 August 2015 в 09:53
поделиться

3 ответа

let dateString = "2015-08-12 09:30:41 +0000"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
if let dateFromString = dateFormatter.dateFromString(dateString.componentsSeparatedByString(" ").first ?? "") {
    println(dateFromString)  // "2015-08-12 00:00:00 +0000"
}
3
ответ дан Leo Dabus 20 August 2018 в 23:57
поделиться
  • 1
    это результат, который я ожидал, thx @Leo Dabus – fendy 10 August 2015 в 07:40
  • 2
    В этом решении есть потенциальная ошибка. Когда вы разбираете датуString в объекте NSDate, вы опускаете информацию о часовом поясе, таким образом, если у вас есть дата dateString, например «2015-08-12 23:30:41 -0900», она будет генерировать «2015-08» -12 00:00:00 + 0000 " как выход, тогда как правильный выход должен быть «2015-08-13 00:00:00 + 0000». – utogaria 10 August 2015 в 08:33
  • 3
    @LeoDabus хорошо, я просто хочу подчеркнуть тот факт, что вы дали багги решение, и это было принято как правильный ответ. Если никто этого не обнаружит, это вызовет потенциальный ущерб людям, которые приняли этот ответ, не задумываясь об этом. Итак, ничего личного, действительно. :) – utogaria 10 August 2015 в 08:46
  • 4
    Нет, нет. Нет ошибок – Leo Dabus 10 August 2015 в 08:48
  • 5
    Изучение чего-то нового из этого ответа. Нет ошибки, она возвращает 2015-08-12 00:00:00 +0000 Приветствия! – Ashish Kakkad 10 August 2015 в 08:50

Если вы заботитесь только о часовом поясе на устройстве пользователя, то есть вы не собираетесь сохранять эту форматированную строку даты на сервер и т. д., тогда вы можете использовать следующий код:

var formatter: NSDateFormatter = NSDateFormatter()
formatter.dateFormat="yyyy-MM-dd 00:00:00 Z"
formatter.stringFromDate(date)

Если вы хотите сохранить эту строку даты на сервере, то вы должны добавить информацию о часовом поясе в форматтер:

var formatter: NSDateFormatter = NSDateFormatter()
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
formatter.dateFormat="yyyy-MM-dd 00:00:00 Z"
formatter.stringFromDate(date)

Обновить

Теперь я понимаю, что вы на самом деле хотели do, у вас есть строка даты вместо объекта NSDate в качестве входа.

Вы можете использовать следующий код для достижения желаемого результата в отношении сохранения информации о часовом поясе на входе.

let dateString = "2015-08-12 09:30:41 +0000"
let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let timeZone = NSTimeZone(forSecondsFromGMT: 0)

let inputDateFormatter = NSDateFormatter()
inputDateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss Z"
inputDateFormatter.calendar = calendar

if let inputDate = inputDateFormatter.dateFromString(dateString) {
    let outPutDateFormatter = NSDateFormatter()
    outPutDateFormatter.calendar = calendar
    outPutDateFormatter.timeZone = timeZone
    outPutDateFormatter.dateFormat = "yyyy-MM-dd 00:00:00 Z"
    print(outPutDateFormatter.stringFromDate(inputDate))
}
0
ответ дан utogaria 20 August 2018 в 23:57
поделиться
  • 1
    Я уже пытаюсь использовать ваш формат, предлагаю, я ввожу 2015-08-13 hh: mm: ss (текущее время), формат с использованием вашего формата, но в базе данных, дата валютирования - 2015-08-12 17:00:00 +0000 – fendy 10 August 2015 в 07:33
  • 2
    Вы убедились, что формат часа / минуты / секунды жестко запрограммирован? Невозможно вывести значение часа в форматированной строке, если вы используете тот же формат, который указан выше. Не могли бы вы попытаться распечатать форматированную строку даты на консоли отладки Xcode и подтвердить это? – utogaria 10 August 2015 в 07:42

Самый простой способ удалить временную часть из экземпляра NSDate -

let startOfDate = NSCalendar.currentCalendar().startOfDayForDate(NSDate())

Чтобы получить дату в зависимости от текущего часового пояса, используйте

let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
calendar.timeZone = NSTimeZone(forSecondsFromGMT: 0)
let startOfDate = calendar.startOfDayForDate(NSDate())
println(startOfDate)
0
ответ дан vadian 20 August 2018 в 23:57
поделиться
  • 1
    но если i println (& quot; (startOfDate) "), то почему дата результата: 2015-08-11 17:00:00 +0000 – fendy 10 August 2015 в 07:12
  • 2
    NSDate не имеет представления о часовом поясе, в котором вы живете. Распечатка текущей даты с println(NSDate()) печатает также дату в UTC – vadian 10 August 2015 в 07:21
Другие вопросы по тегам:

Похожие вопросы: