将带有时区的字符串转换为Date

时间:2014-10-01 10:20:42

标签: ios nsdate nsdateformatter

这是日期字符串

NSString * dateString = @"Mon Sep 29 14:40:00 2014 PET";

如何将其转换为NSDate?

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
[dateFormatter setCalendar:[NSCalendar currentCalendar]];
[dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss yyyy zzz"];
NSDate* date = [dateFormatter dateFromString:dateString];

以上代码不起作用。 上述案例的正确日期格式是什么?

1 个答案:

答案 0 :(得分:2)

问题是你的时区定义(PET),因为它不在可识别的时区列表中(请不要问为什么不);这个时区在Apple的系统中大多称为UTC-5,因此:


NSString *_dateString = @"Mon Sep 29 14:40:00 2014 PET";
_dateString = [_dateString stringByReplacingOccurrencesOfString:@"PET" withString:@"UTC-5"];
NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init];
[_dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
[_dateFormatter setCalendar:[NSCalendar currentCalendar]];
[_dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss yyyy zzz"];
NSDate *_date = [_dateFormatter dateFromString:_dateString];
NSLog(@"date : %@", _date);

并且控制台说:

date : 2014-09-29 19:40:00 +0000

这是GMT+0时区中原始日期的正确表示。