Nat*_*kle 2 datepicker nsdate nsdateformatter swift
我试图使用时间格式化程序从日期选择器中快速获取正确的时区,但它不起作用。我得到的是 UTC,而不是 EST。
1)如果我打印 dateFormatter.stringFromDate(datePicker) 我得到 EST,但是
2)我不需要字符串,我需要 EST 中的 NSDate 所以
3)我可以用它来获取EST中的timeIntervalSinceDate(NSDate)。
我试图将其从字符串返回到 NSDate 的技巧如下所示,但没有奏效。它仍然是 UTC,并且自日期以来的时间间隔不正确。
dateFormatter.locale = NSLocale.currentLocale()
dateFormatter.timeZone = NSTimeZone.localTimeZone()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date: NSDate = dateFormatter.dateFromString(dateFormatter.stringFromDate(datePicker))!
print(date)
print(date.timeIntervalSinceDate(datePicker))
Run Code Online (Sandbox Code Playgroud)
上面的答案是完全错误的。日期选择器随时报告系统区域设置中的日期,因此,如果日期选择器显示 08:00 时间并且您是 GMT+2,则选择器的属性日期将为 06:00。
因此,为了获得 datePicker 的绝对值,您必须将视图中加载的 UTC 时区传递给他:
datePicker.timeZone = TimeZone.init(identifier: "UTC")
Run Code Online (Sandbox Code Playgroud)
现在,选择器的日期属性将是预期和选择的属性。
您无法从日期选择器“获取时区”。你可以去约会。该日期将独立于设备的当前时区。
也许您认为您有不同的日期,但实际上,不存在“UTC 日期”或“EST 日期”这样的东西。相反,只有一个日期,您可以使用日期格式化程序来显示不同时区的日期。
请注意,您的代码中有相当多的冗余。日期格式化程序的默认区域设置和时区已经与您设置的值相同。另外,当您有一个返回 a 的方法时,NSDate您无需使用 注释该常量: NSDate,这会使您的代码更加冗长和混乱。
请注意,如果您print输入日期,控制台将始终显示 UTC。例如
let date = NSDate() // Nov 10, 9:44 PM
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "YYYY-MM-dd hh:mm a"
let dateString = dateFormatter.stringFromDate(date) // "2015-11-10 09:44 PM"
print(date) // "2015-11-10 20:44:54 +0000\n"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13495 次 |
| 最近记录: |