не удается преобразовать дату с отметкой времени в строку в swift 4 - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь преобразовать строковую дату timeStamp в Date.

Результат всегда возвращает ноль.

func getDatefromTimeStamp (str_date : String , strdateFormat: String) -> String { 
    // stringDate '2018-01-01T00:00:00.000+03:00' 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
    dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) as TimeZone! 


    let date = dateFormatter.date(from: str_date) 
    dateFormatter.dateFormat = strdateFormat 
    let datestr = dateFormatter.string(from: date!) 
    return datestr 
}

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Ваша основная проблема заключается в том, что формат "yyyy-MM-dd'T'HH:mm:ssZ" не соответствует строке, такой как "2018-01-01T00:00:00.000+03:00". Эта строка содержит миллисекунды, а ваш формат - нет.

Обновите свой формат до "yyyy-MM-dd'T'HH:mm:ss.SSSZ".

Это исправит результат nil.

Тогда вам следует очистить использование NSTimeZone. Просто используйте TimeZone.

dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)

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

Однако вы можете или не хотите устанавливать часовой пояс при преобразовании результирующего Date в новый String. Это зависит от того, какой результат вы хотите.

Вам нужна последняя строка в формате UTC (что вы получите с вашим текущим кодом) или конечная строка в местном времени пользователя?

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

0 голосов
/ 01 ноября 2018

Прежде всего, я настоятельно рекомендую использовать охрану вместо сил

Во-вторых, почему вы устанавливаете формат даты дважды? первый раз это dateFormatter.dateFormat = "yyyy-MM-dd'T'HH: mm: ssZ", затем через несколько строк его сбрасывают с помощью параметра, который вы передали в dateFormatter.dateFormat = strdateFormat. выберите один и установите его в начале - это может быть причиной вашей проблемы

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

...