参见英文答案 >
NSDate Format outputting wrong date5个
我有以下代码,它采用NSString并返回NSDate.我已经从一个完全正常运行的项目中复制了这个代码 – 但是有些如何给我错误的输出
我有以下代码,它采用NSString并返回NSDate.我已经从一个完全正常运行的项目中复制了这个代码 – 但是有些如何给我错误的输出
- (NSDate *)dateFromString:(NSString *)date { static NSDateFormatter *dateFormatter; if (!dateFormatter) { dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"dd-MM-yyyy"]; } NSLog(@"Date: %@ Formatted: %@",date,[dateFormatter dateFromString:date]); return [dateFormatter dateFromString:date]; }
输出来自日志:
Date: 07-01-2014 Formatted: 2014-01-06 18:30:00 +0000 Date: 24-01-2014 Formatted: 2014-01-23 18:30:00 +0000 Date: 06-01-2014 Formatted: 2014-01-05 18:30:00 +0000 Date: 15-01-2014 Formatted: 2014-01-14 18:30:00 +0000 Date: 22-01-2014 Formatted: 2014-01-21 18:30:00 +0000 Date: 31-01-2014 Formatted: 2014-01-30 18:30:00 +0000 Date: 14-01-2014 Formatted: 2014-01-13 18:30:00 +0000 Date: 30-01-2014 Formatted: 2014-01-29 18:30:00 +0000
奇怪的是,它也在改变日期.. !!
任何帮助…… !!!
解决方法
结果是格林威治标准时间输出结果 – 即如果你距格林威治标准时间5:3小时.
如果您希望在该时区中返回格式化日期,则需要指定时区:(这就是0000的含义)
- (NSDate *)dateFromString:(NSString *)date { static NSDateFormatter *dateFormatter; if (!dateFormatter) { dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; [dateFormatter setDateFormat:@"dd-MM-yyyy"]; } NSLog(@"Date: %@ Formatted: %@",[dateFormatter dateFromString:date]); return [dateFormatter dateFromString:date]; }