dateFromComponents提供错误的日期

问题描述 投票:0回答:2

我试图从Date获得一个NSDateComponents对象,但是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
ios swift nsdate nsdatecomponents
2个回答
6
投票

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

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

1
投票

它给你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)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.