繁体   English   中英

从字符串格式错误地格式化了NSDate

[英]Incorrectly formatting an NSDate from string

我想从一个字符串创建一个NSDate:

NSString *mostRecentMentionMessageTimestamp = [mostRecentMessage valueForKey:@"updated_at"];
NSLog(@"%@",mostRecentMentionMessageTimestamp);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSDate *mostRecentMentionDate = [dateFormatter dateFromString:mostRecentMentionMessageTimestamp];
NSLog(@"%@",mostRecentMentionDate);

当我打印字符串时,它是:2011-11-10T07:22:59Z

从字符串中确定日期并打印后,它为(null)

我究竟做错了什么?

您需要设置时区并将Z放在日期格式的末尾。 由于您的日期带有Z ,因此采用UTC。 因此,您可以使用:

[dateFormatter setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @"UTC"]];
[dateFormatter setDateFormat: @"yyyy-MM-dd'T'HH:mm:ss"];

您尝试转换为NSDate的字符串值不正确。 “ 2011-11-10T07:22:59Z”
它应使用时区差异值代替“ Z”,以使其与日期格式器的格式兼容。

例如2011-11-10T07:22:59 + 0430

格式几乎正确,请使用:

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];

要解决时区问题,请使用@Jef add的解决方案:

[dateFormatter setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @"UTC"]];

完整的示例代码:

NSString *mostRecentMentionMessageTimestamp = @"2011-11-10T07:22:59Z";
NSLog(@"input:  %@",mostRecentMentionMessageTimestamp);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
[dateFormatter setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
NSDate *mostRecentMentionDate = [dateFormatter dateFromString:mostRecentMentionMessageTimestamp];
NSLog(@"output: %@",mostRecentMentionDate);

NSLog输出:

input:  2011-11-10T07:22:59Z
output: 2011-11-10 07:22:59 +0000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM