我正在为iPhone开发一个应用程序,我需要将XML Feed中的日期转换为HH:MM格式。
我有以下方法不起作用,我不知道我做错了什么。
例如,timeToConvert字符串为:“星期一,2010年2月1日21:55:00 +0100 ”(不带引号)
当区域设置为US(我回到正确的日期)时,该方法有效,但是当我将区域(在Settings-> General-> International)更改为西班牙或其他区域(在我回来没事了。)
- (id)timeConvertToHHMM:(NSString *)timeToConvert {
NSString *newPubDate = timeToConvert;
//Let's remove any rubbish from the code
newPubDate = [newPubDate stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
//create formatter and format to convert the XML string to an NSDate
NSDateFormatter *originalDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[originalDateFormatter setDateFormat:@"EEE, d MMM yyyy H:mm:ss z"];
//run the string through the formatter
NSDate *formattedDate = [[NSDate alloc] init];
formattedDate = [originalDateFormatter dateFromString:newPubDate];
//Let's now create another formatter to take the NSDate and convert format it to Hours and minutes
NSDateFormatter *newDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[newDateFormatter setDateFormat:@"HH:mm"]; // 24H clock set
// And let's convert it back to a readable string
NSString *calcHHMM = [newDateFormatter stringFromDate:formattedDate];
NSLog(@"CalcHHMM: %@", calcHHMM);
return calcHHMM;
}
任何提示为什么这不起作用,只返回NULL将非常受欢迎。
答案 0 :(得分:12)
问题似乎是您的区域设置不是“en-US”,因此日期格式化程序不会使用提供的en-US格式解析字符串。虽然可能有更优雅的通用解决方案,但在originalDateFormatter上执行en_US的setLocale可以用作解决问题的解决方法。
正如您在代码中尝试过的那样:
[originalDateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
答案 1 :(得分:2)
我有完全相同的问题。我的问题是我的初始日期字符串有一个毫秒的字符:
示例:2011-02-06 08:13:22:1
正在使用以下格式进行解析:[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
iPhone模拟器是宽容的,并且用毫秒成功地解析了日期,但是在构建到我的iphone时却没有。
将格式化程序更改为:[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.S"];
解决了问题。