Eri*_*ese 22 iphone utc objective-c nsdate nsdateformatter
在Objective-C中编写一个iPhone应用程序,我有一个字符串形式的日期(UTC格式,最后用Z表示零UTC偏移,或祖鲁时间),我需要将其解析为一个NSDate
对象.
一点代码:
NSDateFormatter* df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
NSString* str = @"2009-08-11T06:00:00.000Z";
NSDate* date = [df dateFromString:str];
通过调试器运行,date
最终nil
!我假设它与我的日期格式字符串有关.Z
在日期格式文字中,将日期格式设置为yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
.NWC*_*der 28
我也有这个问题,我不确定它是否是Apple代码中的API错误,或者我缺乏理解,但我通过在我的日期字符串中使用小时偏移来解决它.
如果您将示例中的代码更改为:
NSDateFormatter* df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
NSString* str = @"2009-08-11T06:00:00.000-0700"; // NOTE -0700 is the only change
NSDate* date = [df dateFromString:str];
Run Code Online (Sandbox Code Playgroud)
它现在将解析日期字符串.当然-0700小时是我的抵消,你必须把它改成你的.希望这可以帮助.
Ped*_*eno 13
大多数答案建议你将'Z'视为文字字符.不要这样做!
Z实际上意味着日期偏移0到UTC(+0000).
这是根据时区格式ISO8601:
ISO 8601时区格式:与UTC的常量,特定偏移量,除UTC本身("Z")外,其格式始终相同.
"-08:00"
"Z"
您要做的是为NSDateFormatter使用以下格式:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 2013-11-18T23:00:00.324Z
[formatter setTimeZone:[NSTimeZone localTimeZone]];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"];
return formatter;
Run Code Online (Sandbox Code Playgroud)
通过重复Z五次,您可以告诉格式化程序在解析字符串时使用ISO8601.
奖金:
有关更多信息,请查看此文档.
归档时间: |
|
查看次数: |
19354 次 |
最近记录: |