微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NSDate无法使用NSDateFormatter正确转换

如何解决NSDate无法使用NSDateFormatter正确转换

| 我有以下NSDateFormatter:
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@\"MMM. d,yyyy\"];

NSLocale *usLocal = [[NSLocale alloc] initWithLocaleIdentifier:@\"en_US\"];
[dateFormatter setLocale:usLocal];
我有一个while循环,它从给定的开始日期开始,然后将日期递增一个,直到达到特定的结束日期。
NSDate *d = start;
while(YES){     
   Nsstring *td = [dateFormatter stringFromDate:d];
   NSLog(@\"converted date %@ to %@\",d,td);
   ...adds a date and re-initializes d
}
而且我得到如下输出
2011-06-11 17:10:18.678 listof100[8784:707] converted date 2011-05-31 00:00:00 +0000 to May. 30,2011
2011-06-11 17:10:18.687 listof100[8784:707] converted date 2011-06-01 00:00:00 +0000 to May. 31,2011
2011-06-11 17:10:18.717 listof100[8784:707] converted date 2011-06-02 00:00:00 +0000 to Jun. 1,2011
如您所见,所有日期都无法正确转换。他们全都休息了1天。为什么会这样呢?我该如何解决?     

解决方法

        在我看来,日期是在与格式化程序使用的日期不同的时区中创建的。
NSDate * d = [NSDate dateWithTimeIntervalSince1970:800000];    
// Arbitrary date

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@\"MMM. d,yyyy\"];

NSLocale *usLocal = [[NSLocale alloc] initWithLocaleIdentifier:@\"en_US\"];
[dateFormatter setLocale:usLocal];


//!!!: Set time zone
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

NSString *td = [dateFormatter stringFromDate:d];
NSLog(@\"converted date %@ to %@\",d,td);
产量:   2011-06-11 22:44:01.642 TimeZoneFormatter [21901:207]转换日期1970-01-10 06:13:20 +0000到1970年1月10日     ,        不知道为什么会发生这种情况,但是如果它是持久的,那么对其进行修复应该比在转换它之前向d添加一天更困难:
NSString *td = [dateFormatter stringFromDate:[d dateByAddingTimeInterval:86400]];
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。