dateFromComponents 默认为上午 8:00 [重复]

Posted

技术标签:

【中文标题】dateFromComponents 默认为上午 8:00 [重复]【英文标题】:dateFromComponents defaults to 8:00 AM [duplicate] 【发布时间】:2016-09-09 04:51:33 【问题描述】:

我试图了解NSCalendar 及其组件在Swift 中的工作原理。我从日期中提取组件,更改组件属性并重建日期。我期待得到Sept 9, 2015, 12:00 AM 但是 取而代之的是Sept 9, 2015, 8:00 AM

为什么小时部分是上午 8:00?

let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
calendar?.timeZone = NSTimeZone(abbreviation: "GMT")!

let components = calendar?.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: NSDate())

components?.year            // 2016
components?.month        // 9
components?.day            // 9
components?.hour          // 4
components?.minute      // 31
components?.second      // 54

components?.year = 2015
components?.month = 9
components?.day = 9
components?.hour = 0
components?.minute = 0
components?.second = 0

calendar?.dateFromComponents(components!) // Sept 9, 2015, 8:00 AM

上面的代码不适用于任何用例。我只是想了解NSCalendarNSDateComponentsNSDate 是如何联系在一起的。

【问题讨论】:

你看日期怎么样?日期输出显示什么时区?这可能不是问题。 【参考方案1】:

当您打印它时,您会得到正确的日期,NSDate 是 Sept 9, 2015, 8:00 AM 因为您将时区设置为 GMT,如果您将时区更改为 NSTimeZone.defaultTimeZone(),它将返回日期为 "Sep 9, 2015, 12:00 AM"

【讨论】:

以上是关于dateFromComponents 默认为上午 8:00 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

dateFromComponents 给出了错误的日期

kotlin判断是否为null写法优化

kotlin判断是否为null写法优化

kotlin判断是否为null写法优化

5.17 上午 我外教 单词 linux

5.4上午