0

鉴于此代码:

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyyMMdd"];
NSArray *datesArray = @[@"20130326", @"20130327", @"20130328", @"20130329", @"20130330", @"20130331", @"20130401"];
for (NSString *dateString in datesArray) {
    NSDate *date = [dateFormatter dateFromString:dateString];
    NSLog(@"date: %@", date);
}

这是我的时区(EST)的输出:

date: 2013-03-26 04:00:00 +0000
date: 2013-03-27 04:00:00 +0000
date: 2013-03-28 04:00:00 +0000
date: 2013-03-29 04:00:00 +0000
date: 2013-03-30 04:00:00 +0000
date: 2013-03-31 04:00:00 +0000
date: 2013-04-01 04:00:00 +0000

当我转到设置 -> 常规 -> 日期和时间,并将时区设置为约旦安曼 (GMT+3) 时,这是相同代码的输出:

date: 2013-03-25 22:00:00 +0000
date: 2013-03-26 22:00:00 +0000
date: 2013-03-27 22:00:00 +0000
date: (null)
date: 2013-03-29 21:00:00 +0000
date: 2013-03-30 21:00:00 +0000
date: 2013-03-31 21:00:00 +0000

为什么?

4

3 回答 3

3

我不确定,但28日约旦安曼的时钟发生变化可能不是巧合:http ://www.evi.com/q/when_do_the_clocks_change_in_amman_jordan

我的怀疑是时钟从 2013-03-28 21:59:59 跳到 2013-03-28 23:00:00,所以安曼不存在时间 2013-03-28 22:00:00 , 约旦时区。

于 2013-01-16T23:42:02.087 回答
1

从 1970 年到现在,在 DST 在安曼开始的日期,我在几年、几个月和几天内运行了一个循环,nil返回。

于 2013-01-17T00:03:35.463 回答
0

dateFormatter我认为您必须在从字符串设置值时指定时区。看到这个问题,它不是完全相同的问题,但它可能会有所帮助。

希望这可以帮助

于 2013-01-16T23:34:58.870 回答