NSDateFormatter和日期转换无效

时间:2010-02-01 21:59:14

标签: objective-c cocoa cocoa-touch ios-simulator

我正在为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将非常受欢迎。

2 个答案:

答案 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"];解决了问题。