[英]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.