当我在DateFormat上设置"HH:mm:ss"时,在极少数情况下我会得到"22:42



我发布了一个全局应用程序。 我在日志中发现了一个奇怪的格式化时间戳。 很少有低于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显示在输出中以表示祖鲁时间,因此请使用XX与从 GMT 设置为 0 秒的时区相结合,会导致输出Z

以上基于以下假设:所需输出中的.22220430是所有秒的小数部分。

您的最终格式应为yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSX.

并且您还必须将格式化程序的区域设置设置为en_US_POSIX.使用dateFormat时,应始终使用该区域设置,以确保用户首选项不会导致意外结果。

另请注意,您不会真正获得秒的小数部分的 8 位有效数字。任何超过三S的东西都可能毫无意义。

相关内容

最新更新