使用时区创建NSDate

时间:2014-05-29 15:41:28

标签: ios nsdate nsdatecomponents

我试图在ios中创建一个日期:

 NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
        [gregorian setTimeZone:[NSTimeZone systemTimeZone]];
        NSDateComponents *dateComponentes=[[NSDateComponents alloc] init];

        //We create a date invented.
        [dateComponentes setYear:2014];
        [dateComponentes setMonth:2];
        [dateComponentes setDay:15];
        [dateComponentes setHour:0];
        [dateComponentes setMinute:0];
        [dateComponentes setSecond:0];
        [dateComponentes setTimeZone:[NSTimeZone systemTimeZone]];

        NSDate *initialDate = [gregorian dateFromComponents:dateComponentes];

问题是,我目前的时区是BST,但是当我打印时,我得到了这个:

(lldb) po [initialDate descriptionWithLocale:[NSLocale localeWithLocaleIdentifier:@"en_GB"]]
Saturday, 15 February 2014 00:00:00 Greenwich Mean Time

但是这个日期我应该得到2014-02-14 23:00:00 +0000吗? :

(lldb) po [initialDate description]
2014-02-15 00:00:00 +0000

我尝试使用NSDate并且是对的,

(lldb) po [[NSDate date] descriptionWithLocale:[NSLocale localeWithLocaleIdentifier:@"en_GB"]] 
Thursday, 29 May 2014 16:35:21 British Summer Time

(lldb) po [[NSDate date] description]
2014-05-29 15:35:26 +0000

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你的第一个例子是2月,也就是冬天,当时英格兰是UTC。你的第二个例子是在DST开关之后,当英格兰是UTC + 1时。使用timeanddate's World Clock播放日期,您会看到NSCalendar正确计算NSDate