Swift DateFormatter - 从 UTC 字符串解析

发布于 2025-01-12 02:54:28 字数 474 浏览 0 评论 0原文

我正在使用字符串扩展将 utc 字符串解析为日期。但解析的日期是错误的。不知道我错过了什么。

extension String {
var parseUTCDateTime:Date? {
    let parser = DateFormatter()
    parser.dateFormat = "MM/dd/yyyy HH:mm:ss a"
    if let result = parser.date(from: self) {
       return result
    }
    return nil
}

当我执行 "3/7/2022 7:40:17 AM".parseUTCDateTime 时,结果返回 2022-03-06 19:10:17 UTC

理想情况下,结果应为 2022-03-06 07:10:17 UTC,因为字符串中包含 AM。

I'm using a String extension to parse utc string to Date. But the parsed date is wrong. Not sure what i'm missing.

extension String {
var parseUTCDateTime:Date? {
    let parser = DateFormatter()
    parser.dateFormat = "MM/dd/yyyy HH:mm:ss a"
    if let result = parser.date(from: self) {
       return result
    }
    return nil
}

When I do "3/7/2022 7:40:17 AM".parseUTCDateTime, the result returned 2022-03-06 19:10:17 UTC.

Ideally the result should be 2022-03-06 07:10:17 UTC as the string contains AM in it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

圈圈圆圆圈圈 2025-01-19 02:54:28

格式字符串现在具有类型安全插值,因此您无需再担心 hhHH 的问题。

try Date(utc: "3/7/2022 7:40:17 AM")
extension Date {
  init(utc string: ParseStrategy.ParseInput) throws {
    try self.init(
      string,
      strategy: ParseStrategy(
        format: """
          \(month: .defaultDigits)\
          /\(day: .defaultDigits)\
          /\(year: .defaultDigits)

          \(hour: .defaultDigits(clock: .twelveHour, hourCycle: .oneBased))\
          :\(minute: .defaultDigits)\
          :\(second: .defaultDigits)

          \(dayPeriod: .standard(.narrow))
          """,
        timeZone: .init(abbreviation: "UTC")!,
        isLenient: false
      )
    )
  }
}

Format strings have type-safe interpolation now, so you don't need to worry about the hh vs HH anymore that tripped you up.

try Date(utc: "3/7/2022 7:40:17 AM")
extension Date {
  init(utc string: ParseStrategy.ParseInput) throws {
    try self.init(
      string,
      strategy: ParseStrategy(
        format: """
          \(month: .defaultDigits)\
          /\(day: .defaultDigits)\
          /\(year: .defaultDigits)

          \(hour: .defaultDigits(clock: .twelveHour, hourCycle: .oneBased))\
          :\(minute: .defaultDigits)\
          :\(second: .defaultDigits)

          \(dayPeriod: .standard(.narrow))
          """,
        timeZone: .init(abbreviation: "UTC")!,
        isLenient: false
      )
    )
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文