2

我以前用几种格式做过几次。无法理解这里俯瞰什么!日期转换不可能那么难!:) 但似乎它太麻烦了。我得到这样的字符串: 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。请帮忙。

什么帮助最终 添加 [formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 按照@MartinR 下面的建议进行迄今为止的转换!

4

3 回答 3

8

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

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

更新:此外,为了避免对当前语言环境的依赖,添加

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

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

于 2013-08-09T14:05:10.990 回答
0

在目标 c 中,NSDate如果您没有设置setTimeZone,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);

UTC日期:2013-01-04 19:14:01 +0000 (GMT+00:00)

于 2013-08-09T14:39:48.547 回答
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

谢谢 :)

于 2013-08-09T14:02:42.443 回答