我需要识别Tue Aug 13 17:29:20 MSK 2013
之类的日期字符串。而且,据我所知,要做到这一点,我需要在NSDateFormmater中使用'V'符号,但它只识别GMT+04:00
个时区。有没有其他方法来解析时区缩写?
以下是代码:
NSDateFormatter *dft = [[NSDateFormatter alloc] init];
[dft setDateFormat:@"EEE MMM dd HH:mm:ss V yyyy"];
NSLog(@"%@", [dft stringFromDate:[NSDate date]]);
NSLog(@"%@", [dft dateFromString:@"Tue Aug 13 17:29:20 MSK 2013"]);
输出:
Tue Aug 13 17:37:41 GMT+04:00 2013
(null)
输出NSLog(@"%@", [dft dateFromString:@"Tue Aug 13 17:29:20 GMT+04.00 2013"])
很好。
答案 0 :(得分:2)
根据http://www.openradar.me/9944011,Apple在Lion / iOS 5时代更新了NSDateFormatter依赖的ICU库。并且它不再处理大多数3个字母的时区,特别是“MSK”(莫斯科时间)因为它们不明确,只有在为语言环境设置“cu”标志时才使用它们。
这意味着你可以处理它。例如:
NSString *threeLetterZone = [[dateString componentsSeparatedByString:@" "] objectAtIndex:4];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithAbbreviation:threeLetterZone];
if (timeZone)
{
NSString *gmtTime = [dateString stringByReplacingOccurrencesOfString:threeLetterZone withString:@"GMT"];
date = [[pivotalDateFormatter dateFromString:gmtTime] dateByAddingTimeInterval:-timeZone.secondsFromGMT];
}