从字符串转换为NSDate时,我发现了这个奇怪的问题。最终日期恰好错误2或3小时(可能是整数小时)。我的数据具有出色的质量,因为它是以编程方式从其他ios设备中挑选出来的。例如,当我尝试转换时:
"2014-05-23 03:14:04 a.m. +0000"
我明白了:
2014-05-23 00:14:04 +0000
或转换时:
"2014-05-23 02:49:30 a.m. +0000"
我明白了:
2014-05-23 00:49:30 +0000
日期格式为西班牙语,因此我的代码为:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss a ZZZ"];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"es"]];
[dateFormatter setAMSymbol:@"a.m."]; // default AM symbol for spanish is a.m.
[dateFormatter setPMSymbol:@"p.m."]; // default PM symbol for spanish is p.m.
// Set the date format for the input string
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss a ZZZ"];
newEvent.time = [dateFormatter dateFromString:[timeArray objectAtIndex:i]];
根据:
https://stackoverflow.com/a/13757666/2394901
但对a.m.和p.m进行了修改。而不是上午和下午,因为这样的答案是零。
更新:
此问题不是由于下面建议的时区差异造成的。相反,正确的解决方案是:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"es"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ssa ZZZ"];
newEvent.time = [dateFormatter dateFromString:[timeArray objectAtIndex:i]];
**问题是大写字母HH,应该是......
有人知道信件何时必须大写?