从字符串转换为nsdate

时间:2014-05-23 04:59:26

标签: ios objective-c nsdate locale nsdateformatter

从字符串转换为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,应该是...... 有人知道信件何时必须大写?

0 个答案:

没有答案