dateFromComponents 给出了错误的日期

Posted

技术标签:

【中文标题】dateFromComponents 给出了错误的日期【英文标题】:dateFromComponents gives Wrong date 【发布时间】:2016-08-06 13:57:42 【问题描述】:

我试图从NSDateComponents 获取Date 对象,但Calendar.date(from: Components) 给出的日期比我原始组件中的日期早一天。

let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let dateComponents = calendar!.components([.Year , .Month , .Weekday, .Day], fromDate: NSDate())
dateComponents.year = 2015
dateComponents.month = 9
dateComponents.day = 1

po calendar!.dateFromComponents(dateComponents)
▿ Optional(2015-08-31 18:30:00 +0000)
  - Some : 2015-08-31 18:30:00 +0000

【问题讨论】:

【参考方案1】:

calendar对象的时区设置为UTC,并尝试从calendar获取Date

calendar.timeZone = NSTimeZone(name: "UTC")!

【讨论】:

嘿,你能告诉我这个工作的原因吗?【参考方案2】:

它为您提供UTC 时区,只需像这样使用 NSDateFormatter 转换日期,您就会得到答案 -

let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let dateComponents = calendar!.components([.Year , .Month , .Weekday, .Day], fromDate: NSDate())
dateComponents.year = 2015
dateComponents.month = 9
dateComponents.day = 1


let df = NSDateFormatter()
df.dateFormat = "yyyy-MM-dd"
let datestring = df.stringFromDate(calendar!.dateFromComponents(dateComponents)!)
print(datestring)

【讨论】:

谢谢。但我认为,我需要设置时区才能获得正确的日期。

以上是关于dateFromComponents 给出了错误的日期的主要内容,如果未能解决你的问题,请参考以下文章

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

从 NSDateComponents 创建的 NSDate 不正确?

UNTimeIntervalNotificationTrigger nextTriggerDate() 是不是给出了错误的日期?

s-s-rS 公式给出错误优先函数,iif 条件给出错误

程序给出错误的分配错误

Python 列表给出了 Numpy 数组的错误?