日期一直返回到 UTC,而不是在它所在的语言环境中保持格式

Date keeps going back to UTC versus staying formatted in the locale it is in

我已将 date/time 从 UTC 转换为正确的语言环境时区,但是当我创建通知时,它一直恢复为 UTC 时间。

这是我最近一次尝试解决此问题,但未能解决问题:

let gregorian = Calendar(identifier: .gregorian)
      var components = gregorian.dateComponents([.year, .month, .day, .hour, .minute, .second], from: newDate!)
           print(components)

      // Change the time to locale
      formatter.dateFormat = "HH:mm"
      formatter.timeZone = NSTimeZone.local
      let date = gregorian.date(from: components)!

如果我检查日期的值,时间回到UTC +0000

这是代码的其余部分:

      let triggerDaily = Calendar.current.dateComponents([.hour, .minute, .second,], from: date)
      print(triggerDaily)
      let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDaily, repeats: true)

如能帮助解决此问题,我们将不胜感激。

[更新] 阅读以下评论后,我做了以下更改:

         formatter.dateFormat = "HH:mm"
         formatter.timeZone = NSTimeZone.local
         let myDate = formatter.string(from: date)

         let newDate = formatter.date(from: myDate)

它现在按我预期的那样工作。

你说“如果我检查日期的值,时间返回到 UTC +0000”

这种说法毫无意义。日期对象没有时区。他们及时记录地球上任何地方的瞬间。只有当您显示它时,它才会映射到特定时区。

如果您尝试 print(aDate) 任何 日期,它将总是 以 UTC 显示。

试试这个:

print(DateFormatter.localizedString(from: aDate, 
    dateStyle: .medium,
    timeStyle: .medium)

这将使用适合您所在地区的日期格式在您当地的时区打印 aDate