日期一直返回到 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
。
我已将 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
。