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

将NSString转换为NSDate(并再次返回)

从 NSDate 到 NSString 的转换,属性上的核心数据迁移未正确显示字符串

NSDate和NSString的转换及判定是昨天,今天,明天

将(日期+时间)从 NSString 转换为 NSDate 并添加一些小时

NSDate NSString时间字符串 NSTimeInterval 的转换