当我在 DateFormat 上设置“HH:mm:ss”时,在极少数情况下我会得到“22:42:31 AM”。 ` AM` 出乎意料。我该如何解决?
When I set `HH:mm:ss` on DateFormat, I get `22:42:31 AM` in rare case. ` AM` is unexpected. How can I fix it?
我发布了一个全局应用程序。
我在日志中发现了一个奇怪的格式时间戳。
很少有低于 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())
}
}
A
代表"Milliseconds in day"。它与您想要的小数秒不同。为此,请使用 S
.
ZZZZZ
给出格式如 -08:00
的时区。由于您希望实际的 Z
出现在输出中以表示祖鲁时间,因此请使用 X
。 X
与设置为距格林威治标准时间 0 秒的时区相结合,在输出中产生 Z
。
以上是假设你想要输出的.22220430
都是小数秒
您的最终格式应为 yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSX
。
并且您还必须将格式化程序的语言环境设置为 en_US_POSIX
。使用 dateFormat
时应始终使用该语言环境,以确保用户首选项不会导致意外结果。
另请注意,您不会真正获得小数秒的 8 位有效数字。任何超过三个 S
的东西都可能毫无意义。
我发布了一个全局应用程序。 我在日志中发现了一个奇怪的格式时间戳。 很少有低于 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()) } }
A
代表"Milliseconds in day"。它与您想要的小数秒不同。为此,请使用 S
.
ZZZZZ
给出格式如 -08:00
的时区。由于您希望实际的 Z
出现在输出中以表示祖鲁时间,因此请使用 X
。 X
与设置为距格林威治标准时间 0 秒的时区相结合,在输出中产生 Z
。
以上是假设你想要输出的.22220430
都是小数秒
您的最终格式应为 yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSX
。
并且您还必须将格式化程序的语言环境设置为 en_US_POSIX
。使用 dateFormat
时应始终使用该语言环境,以确保用户首选项不会导致意外结果。
另请注意,您不会真正获得小数秒的 8 位有效数字。任何超过三个 S
的东西都可能毫无意义。