鉴于此代码:
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
为什么?
答案 0 :(得分: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不存在在约旦时间的安曼。
答案 1 :(得分:1)
我从1970年到现在经历了几年,几个月和几天的循环,在DST开始的安曼日期,nil
被退回。
答案 2 :(得分:0)
我认为您必须在设置字符串值时指定dateFormatter
的时区。请参阅this question,它不是完全相同的问题,但它可以提供帮助。
希望这会有所帮助