我当前所在时区 UTC-05:00。当我调用函数 NSDate(timeIntervalSince1970:0)
时,它返回“Dec 31, 1969, 7:00 PM”
let date = NSDate.init(timeIntervalSince1970: 0) // "Dec 31, 1969, 7:00 PM"
print(date) // "1970-01-01 00:00:00 +0000\n"
我读到了这个How to get NSDate day, month and year in integer format?但问题是,由于 5 小时时差,我总是得到 1969-12-31。
let calendar = NSCalendar.currentCalendar()
calendar.getEra(&era, year:&year, month:&month, day:&day, fromDate: date)
year // 1969
month // 12
day // 31
var hour = 0, minute = 0, second = 0
calendar.getHour(&hour, minute: &minute, second: &second, nanosecond: nil, fromDate: date)
hour // 19
minute // 0
second // 0
有没有办法获取当前时区的当前年、月、日值等。我在这里寻找的是:
year // 1970
month // 01
day // 01
最佳答案
timeIntervalSince1970
初始化程序为您提供(如文档所述)一个 NSDate
,它是自 1970 年 1 月 1 日 00:00:00 以来的一些秒数 UTC,不在您本地的时区。您得到的结果是正确的,因为它们显示的是您本地时区与当时的时差。您传递的是 0,所以您得到的是 1970 年 1 月 1 日 00:00:00 UTC,然后 NSCalendar
会为您提供等效的日期和时间本地时区。
如果您想在本地时区获得 1970 年 1 月 1 日 00:00:00,您需要从 NSCalendar
中专门请求该日期:
let calendar = NSCalendar.currentCalendar()
calendar.timeZone = NSTimeZone.localTimeZone()
let date = calendar.dateWithEra(1, year: 1970, month: 1, day: 1, hour: 0, minute: 0, second: 0, nanosecond: 0)
calendar.getEra(&era, year:&year, month:&month, day:&day, fromDate: date!)
year // 1970
month // 1
day // 1
这不是 timeIntervalSince1970
的 0 偏移量。如果检查,您会看到结果对应于您的时区与 UTC 的偏移量:
date?.timeIntervalSince1970 // 25200, for me
关于ios - 如何从 NSDate 获取当前时区的年月日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35657561/