我发布了一个全局应用程序。 我在日志中发现了一个奇怪的格式化时间戳。 很少有低于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
的东西都可能毫无意义。