繁体   English   中英

NSDateFormatter到NSString?

[英]NSDateFormatter to NSString?

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我只对现在的时间感兴趣。

我的问题是,当我从NSDate获得时间时,它不包含任何时区信息。 这是我的预期,所以从NSDate返回的时间是01:21:57 PM。 为了纠正这个问题,我正在使用NSDateFormatter并设置其语言环境,它正确地解释了我在伦敦,英国夏令时(GMT + 01)。 最后,我希望将新的更正日期作为NSDate返回,因此我在之前正确的dateString上使用dateFromString。

任何人都可以告诉我为什么结果日期恢复到未校正(即01:21:57 PM)无论如何我可以进行此转换并仍然保持指定的locale / timeZone?

>> 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

自参考日期(2001年1月1日00:00 GMT)以来,所有NSDate对象都存储为秒,因此始终为GMT + 0。

在你的代码中。 您只提供了区域设置和时间的格式。 您没有提供日期格式,因此您获得了默认结果:1970-01-01

NSDate *dateNow = [NSDate date];
NSLog(@"NSDate                : %@", dateNow);

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setTimeStyle:NSDateFormatterLongStyle];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];

NSString *dateString = [dateFormatter stringFromDate:dateNow];
NSLog(@"NSDateFormatter String: %@", dateString);

NSDate *dateObject = [dateFormatter dateFromString:dateString];
NSLog(@"NSDateFormatter Object: %@", dateObject);

输出:

2011-04-08 10:12:39.119 test[2957:207] NSDate                : 2011-04-08 14:12:39 +0000
2011-04-08 10:12:39.121 test[2957:207] NSDateFormatter String: April 8, 2011 10:12:39 AM EDT
2011-04-08 10:12:39.123 test[2957:207] NSDateFormatter Object: 2011-04-08 14:12:39 +0000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM