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

时间:2013-08-09 13:49:45

标签: iphone ios objective-c nsdate nsdateformatter

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

我尝试使用此代码将其转换为日期:

[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:950 AM

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

更新 将格式更改为

[Date_Converter getDateFromString : date
       withFormat : @"MMM dd yyyy hh:mm:ss:SSSa"];

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

最终得到什么 添加     [formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@“en_US_POSIX”]]; 到目前为止转换为@MartinR建议如下!

3 个答案:

答案 0 :(得分:7)

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

  • 年份的正确格式为yyyy,而不是YYYY
  • 12小时上午/下午时间的格式为hh,而不是HH

更新:此外,为避免依赖当前区域设置,请添加

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

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

答案 1 :(得分:0)

检查一下..

  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

谢谢:)

答案 2 :(得分:0)

如果您未设置NSDate,则setTimeZone的目标c中,NSDate会将默认时区设为localTimeZone。因此,如果您需要获得以NSString字符串格式提供的确切日期,则需要将TimeZone设置为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)