iOS:日期转换导致错误的日期

Jea*_*ean 2 iphone objective-c nsdate nsdateformatter ios

我以前用几种格式做了好几次.无法理解这里有什么可以忽略的!日期转换不能那么难!:)但似乎太烦人了.我得到这样的字符串: 2013年8月9日06:44:01:950AM

我试图用这段代码将它转换为日期:

[Date_Converter getDateFromString:date withFormat:@"MMM dd YYYY HH:mm:ss:SSSa"]
Run Code Online (Sandbox Code Playgroud)

并在DateConverter.m中

+(NSDate *) getDateFromString:(NSString *) strDate
                   withFormat:(NSString *) format {

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:format];
    //[formatter setTimeZone:[NSTimeZone localTimeZone]];
    NSDate *dateFromStr = [formatter dateFromString:strDate];
    return dateFromStr;
}
Run Code Online (Sandbox Code Playgroud)

NSDate从上面的方法得到的返回值是这个! 2013-01-04 19:14:01 +0000

输入日期为 2013年8月9日06:44:01:950AM

怎么会这样?对于各种其他日期格式,我已经多次使用相同的方法.请帮忙.我在这里俯瞰什么?

更新 将格式更改为

[Date_Converter getDateFromString : date
       withFormat : @"MMM dd yyyy hh:mm:ss:SSSa"];
Run Code Online (Sandbox Code Playgroud)

但它仍然返回null.请帮助.

最后提供了什么 添加[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 到目前为止转换为@MartinR建议如下!

Mar*_*n R 7

您的日期格式有两个错误:

  • 多年来正确的格式yyyy不是YYYY.
  • 12小时AM/PM时间的格式hh不是HH.

更新:此外,为避免依赖于当前语言环境,请添加

[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
Run Code Online (Sandbox Code Playgroud)

如果你有一个使用英文月份名称/缩写的固定输入格式.