【问题标题】:dateFromComponents gives Wrong datedateFromComponents 给出了错误的日期
【发布时间】: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

【问题讨论】:

    标签: ios swift nsdate nsdatecomponents


    【解决方案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)
    

    【讨论】:

    • 谢谢。但我认为,我需要设置时区才能获得正确的日期。
    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 2020-01-22
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多