代码之家  ›  专栏  ›  技术社区  ›  Maiko Ohkawa

当我将“hh:mm:ss”设置为dateform时,很少会得到“22:42:31 am”。` AM`是意外的。我怎么修?

  •  1
  • Maiko Ohkawa  · 技术社区  · 6 年前

    我发布了一个全局应用程序。 我在日志中发现了一个奇怪的格式化时间戳。 很少有小于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 回复  |  直到 6 年前
        1
  •  2
  •   rmaddy    6 年前

    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 可能是毫无意义的。