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

Iphone iOS:日期转换导致错误的日期,iphone,ios,objective-c,nsdate,nsdateformatter,Iphone,Ios,Objective C,Nsdate,Nsdateformatter,我以前用几种格式做过几次。无法理解我在这里忽略了什么!日期转换不能那么难!:)但似乎太麻烦了。 我得到的字符串如下: 2013年8月9日06:44:01:950AM 我正在尝试使用以下代码将其转换为日期: [Date_Converter getDateFromString:date withFormat:@"MMM dd YYYY HH:mm:ss:SSSa"] 在DateConverter.m中 +(NSDate *) getDateFromString:(NSString *) strDa

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

我正在尝试使用以下代码将其转换为日期:

[Date_Converter getDateFromString:date withFormat:@"MMM dd YYYY HH:mm:ss:SSSa"]
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;
}
从上述方法得到的
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"];
但它仍然返回null。请帮忙

什么最终起到了作用 添加 [格式化程序设置语言环境:[[NSLocale alloc]initWithLocaleIdentifier:@“en_US_POSIX”]; 以下@MartinR建议的迄今为止的转换

检查这个

  NSString *date = @"Aug 9 2013 06:44:01:950AM"; 

 [Date_Converter getDateFromString:date withFormat:@"MMM dd yyyy HH:mm:ss:SSSa"];//only you need to lower the char(yyyy) and it will be fine .
这是输出

date = 2013-08-09 00:44:01 +0000

谢谢:)

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

  • 年份的正确格式是
    yyyy
    ,而不是
    yyy
  • 12小时上午/下午时间的格式是
    hh
    ,而不是
    hh
更新:此外,为避免对当前语言环境的依赖,请添加

[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];

如果您有一个使用英文月名/缩写的固定输入格式。

在目标c中,对于
NSDate
,如果您没有设置
setTimeZone
NSDate
将默认时区设为localTimeZone。因此,如果您需要获得作为
NSString
string格式给出的确切日期,则需要将时区设置为UTC。按照示例代码进行操作,我想它会对您有所帮助

NSDateFormatter *loacalformatter=[[NSDateFormatter alloc]init];
[loacalformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *localDate =[loacalformatter dateFromString:@"2013-01-04 19:14:01"];
NSLog(@"localDate :%@",localDate);


NSDateFormatter *UTCformatter=[[NSDateFormatter alloc]init];
[UTCformatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[UTCformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *UTCDate =[UTCformatter dateFromString:@"2013-01-04 19:14:01"];
NSLog(@"UTCDate :%@",UTCDate);

UTCDate:2013-01-04 19:14:01+0000(GMT+00:00)

是否使用NSLog打印日期?使用
yyyy
,而不是
yyyy
。并使用
hh
,而不是
hh
。顺便问一下,你是坚持使用那个日期格式,还是可以改成更标准的格式?它来自另一个我无法控制的系统。所以,我被卡住了。让我试试那个@Rob。谢谢谢谢你,罗伯!你的回答帮助了我!你能把它贴出来作为答案吗?这样我就可以把它标对了?你是第一个答对的人@简,谢谢。Martin R发帖了,所以你可以随意接受他的。无意冒犯。虽然这是一个有趣的观察结果,但OP的问题是输入日期是“2013年8月9日”,结果是“2013-01-04”!这不是时区问题。他的日期格式字符串中有一个更基本的问题。是的,使用YYYY似乎会严重破坏日期。我尝试了格式@“MMM dd YYYY hh:mm:ss:SSSa”->它仍然返回空值。有什么指导吗?@Jean:可能是区域设置的问题。尝试添加
[formatter setLocale:[[NSLocale alloc]initWithLocaleIdentifier:@“en_US_POSIX]”如中所示,并查看是否有帮助。是的,看起来就是这样!一旦我添加了initwithlocaleidentifier,现在就可以工作了!非常感谢。