ios - 当我在 DateFormat 上设置 `HH:mm:ss` 时,在极少数情况下我会得到 `22:42:31 AM`。 ` AM` 是意外的。我该如何解决?

标签 ios swift swift4 date-format

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

关于ios - 当我在 DateFormat 上设置 `HH:mm:ss` 时,在极少数情况下我会得到 `22:42:31 AM`。 ` AM` 是意外的。我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50503077/

相关文章:

ios - 以编程方式创建约束时出错

ios - 更改 uiimage 饱和度的最有效方法(在动画期间)

ios - 如何将 URLSessionStreamTask 与 URLSession 一起用于分块编码传输

ios - UITableViewHeaderFooterView 首次加载时不显示自定义

c++ - 在 iOS 上的 C++ 中获取加密安全随机数

iphone - 每次通话结束后在 iOS 中调用应用程序

ios - 如何在 Swift 中获取 UIImage 中像素的颜色?

ios - 未调用 Swift 4 GLKViewController 更新方法

iOS 12 – 获取 iPhone 电池循环计数的最简单方法

ios - JonkyKong 的 SideMenu 'No Such Module' 错误