NSString 到 NSDate 的转换失败
Posted
技术标签:
【中文标题】NSString 到 NSDate 的转换失败【英文标题】:Conversion of NSString to NSDate failing 【发布时间】:2012-10-20 14:40:45 【问题描述】:我有以下代码..
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/YYYY HH:mm"];
NSString *dateString = @"10/27/2012 18:00";
NSDate *parsedDate = [dateFormatter dateFromString:dateString] ;
NSLog(@"Parsed Date.. %@",[parsedDate description]);
我得到的 NSLog 语句为 Parsed Date.. 2011-12-25 00:00:00 +0000
。我将不胜感激任何帮助解决这个问题。我只想将该 NSString 转换为其 NSDate 等效项。也尝试使用 NSTimeZone,但没有效果。我在这里错过了什么?
【问题讨论】:
【参考方案1】:您需要使用小写年份表示,yyyy
而不是YYYY
:
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm"];
如果您想获得正确的时区,您需要设置NSDateFormatter
的时区。默认情况下,它使用您设备的时区。对于格林威治标准时间,请使用以下内容。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm"];
NSString *dateString = @"10/27/2012 18:00";
NSDate *parsedDate = [dateFormatter dateFromString:dateString] ;
NSLog(@"Parsed Date.. %@",[parsedDate description]);
【讨论】:
你应该接受这个答案,他解决了你的问题。查看文档以了解时区格式。【参考方案2】:您使用的格式字符串不正确。见the documentation。基本上,资本YYYY
是“一年中的一周”。尝试改用小写的yyyy
,即
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm"];
【讨论】:
不错。这适用于日期就好了,但是对于我得到 Parsed Date.. 2012-10-27 12:30:00 +0000 的时间我应该使用时区格式吗?或者我可以不这样做吗?以上是关于NSString 到 NSDate 的转换失败的主要内容,如果未能解决你的问题,请参考以下文章
从 NSDate 到 NSString 的转换,属性上的核心数据迁移未正确显示字符串
NSDate和NSString的转换及判定是昨天,今天,明天