NSDate *dateNow = [NSDate date];
NSLog(@"NSDate : %@", dateNow);
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setTimeStyle:NSDateFormatterLongStyle];
NSString *dateString = [dateFormatter stringFromDate:dateNow];
NSLog(@"NSDateFormatter String: %@", dateString);
NSDate *dateObject = [dateFormatter dateFromString:dateString];
NSLog(@"NSDateFormatter Object: %@", dateObject);
首先忽略1970-01-01我只对现在的时间感兴趣。NSDateFormatter NSString?
我的问题是,当我从NSDate获得时间时,它不包含任何时区信息。这是我所期望的,所以从NSDate返回的时间是01:21:57 PM。为了纠正这种情况,我使用NSDateFormatter并设置它的语言环境,它正确地解释了我在伦敦,英国夏令时(GMT + 01)。最后,我想将新的更正日期作为NSDate取回,以便在以前正确的dateString上使用dateFromString。
任何人都可以告诉我为什么结果日期恢复为未修正状态(即01:21:57 PM)是否有我可以做这种转换并仍然保持指定的区域/时区?
>> WALL_CLOCK: 02:21:57 PM
>> NSDate : 2011-04-08 01:21:57 PM +0000
>> NSDateFormatter String: 02:21:57 PM GMT+01:00
>> NSDateFormatter Object: 1970-01-01 01:21:57 PM +0000
,所以如果我需要回到一个NSDate为无论什么原因,我将需要使用另一个NSDateFormatter来调整区域设置以输出正确的时间? – fuzzygoat 2011-04-08 13:54:00
基本上每次你需要显示视图的日期和时间时,你都需要NSDateFormatter。如果你有很多转换,你可以在你的控制器init中创建一个NSDateFormatter的ivar。不要忘记在你的dealloc中发布。 :) – 2011-04-08 13:59:53
是的,我明白它是如何工作的。那么,如果你使用iOS的当前NSDate比较已知的NSDate日期/时间,那么会发生什么呢?你只是在GMT + 0指定了已知的日期做了计算(即从那以后有多少小时),然后我们NSDateFormatter转换为当前语言环境。那有意义吗? – fuzzygoat 2011-04-08 15:54:24