Когда я устанавливаю «ЧЧ: мм: сс» на DateFormat, я получаю «22:42:31 AM» в редком случае.«AM» неожиданно.Как я могу это исправить? - PullRequest
0 голосов
/ 24 мая 2018

Я выпустил глобальное приложение.Я нашел странную отформатированную метку времени в журнале.Это редкие случаи менее 1%, и я не могу найти условие.Вы знаете, как это исправить?

  • Ожидается: большая часть журнала

    2018-05-24T06:10:20.22220430Z
    
  • Неожиданно: редкие случаи

    2018-05-24T06:10:20 AM.22220430Z
    
  • код

    public class sample {
        private let formatter = DateFormatter()
    
        private init() {
            self.formatter.timeZone = TimeZone(secondsFromGMT: 0)
            self.formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.AAAAAAAZZZZZ"
        }
        public func timestamp() -> String {
            return self.formatter.string(from: Date())
        }
    }
    

1 Ответ

0 голосов
/ 24 мая 2018

A представляет «Миллисекунды в день».Это не то же самое, что дробные секунды, которые вы хотите.Для этого используйте S.

ZZZZZ, чтобы получить часовой пояс в формате, таком как -08:00.Поскольку вы хотите, чтобы фактический Z отображался в выходных данных для представления времени зулу, используйте X.X в сочетании с часовым поясом, установленным на 0 секунд по Гринвичу, приводит к Z на выходе.

Вышеуказанное основано на предположении, что .22220430 в вашем желаемом выходе - это все доли секунды.

Ваш конечный формат должен быть yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSX.

И вы также должны установить языковой стандарт форматера на en_US_POSIX.Вы должны всегда использовать эту локаль при использовании dateFormat, чтобы пользовательские настройки не привели к неожиданным результатам.

Также обратите внимание, что вы на самом деле не получите 8 значащих цифр дробных секунд.Все, что больше трех S, вероятно, бессмысленно.

...