我发布了一个全局应用程序。 我在日志中发现了一个奇怪的格式时间戳。 很少有低于 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
表示“一天中的毫秒数”。它与您想要的小数秒不同。为此,请使用 S
。
ZZZZZ
以 -08:00
等格式给出时区。由于您希望实际的 Z
出现在输出中以表示祖鲁时间,因此请使用 X
。 X
与设置为距 GMT 0 秒的时区相结合,在输出中产生 Z
。
以上假设你想要的输出中的.22220430
都是小数秒。
您的最终格式应为 yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSX
。
并且您还必须将格式化程序的区域设置设置为 en_US_POSIX
。在使用 dateFormat
时,您应该始终使用该语言环境,以确保用户偏好不会导致意外结果。
另请注意,您实际上不会获得小数秒的 8 位有效数字。超过三个 S
的任何内容都可能毫无意义。
关于ios - 当我在 DateFormat 上设置 `HH:mm:ss` 时,在极少数情况下我会得到 `22:42:31 AM`。 ` AM` 是意外的。我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50503077/