Why NSCalendar's dateFromComponents returns wrong date?

柔情痞子 提交于 2019-12-29 01:38:34

问题


I am expecting 2010-10-11 00:00:00

But instead I receive 2010-10-10 21:00:00 +0000

I know, that I can add a few hours and receive desired date, but I do not understand why I get previous day with 21 hours...

Please, help!

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:2010];
[comps setMonth:10];
[comps setDay:11];

[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *retDate = [cal dateFromComponents:comps];

回答1:


I think your problem may be solved by setting the NSTimeZone.




回答2:


If you need a specific time format use that formatter or else write this to get correct time. first option...

let formatter = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    let localDate = formatter.dateFromString("1989-10-17T05:00:00.000-0000")

or if you need date from components use the below code like ...

let calendar = NSCalendar.currentCalendar()
    calendar.timeZone = NSTimeZone(name: "GMT")!
    let date = calendar.dateFromComponents(components)

or you need



来源:https://stackoverflow.com/questions/4322687/why-nscalendars-datefromcomponents-returns-wrong-date

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!