ios - 如何从 NSDate 获取当前时区的年月日

标签 ios swift datetime

我当前所在时区 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/

相关文章:

ios - 单元测试 Swift- 从 Storyboard 中转换 View Controller 不起作用

objective-c - 在 Objective-C 中将八进制字符串转换为十进制?

ios - UIImage 在滚动之前不会显示在 TableView 单元格中

swift - UICollectionView 图像闪烁

javascript - Intl.DateTimeFormat 在节点和浏览器中以不同的方式工作

mysql - 从当前小时开始获取行

ios - 如何使用 swift 将一个类对象复制到另一个类对象

swift - 从 UIPageViewController 中删除图像

php - 在php中获取正确的日期格式

objective-c - 将像素点转换为经纬度