Swift - средство форматирования даты возвращает нежелательное время - PullRequest
1 голос
/ 22 апреля 2019

Если я преобразую «2019-01-01T00: 00: 00 + 0000» в дату, я бы хотел, чтобы дата была датой в строке - 1 января 2019 года. И если я вычислю количество секунд вчасть времени, я хотел бы, чтобы результат был нулевым.

Проблема в том, что когда я преобразую свою строку в дату, она сохраняется в часовом поясе UTC.Моя локаль установлена ​​на "en_US_POSIX", а мой часовой пояс установлен на текущий.Мой форматировщик даты использует «гггг-ММ-дд'ТХЧ: мм: ссЗ».Я знаю, что окончательный Z означает UTC, но я не могу определить правильный символ поля, чтобы получить желаемые результаты.

func convertToDate(_ dateString: String) -> Date {
   let dateFormatter = DateFormatter()
   dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
   dateFormatter.locale = Locale(identifier: "en_US_POSIX")
   dateFormatter.timeZone = .current
   let date = dateFormatter.date(from: dateString)
      else {
         print("DATE ERROR:", dateString)
         return Date()
      }
   return date
} 

1 Ответ

3 голосов
/ 22 апреля 2019

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

func convertToDate(_ dateString: String) -> Date? {
    let minusTZ = String(dateString.dropLast(5)) // Assume the string ends with a +9999 timezone
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    let date = dateFormatter.date(from: minusTZ)
    return date
}

Это даст вам локальную дату с той же датой и временем в исходной строке независимо от часового пояса исходной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...