iOS dateFormatter dateFromString 月份问题

Posted

技术标签:

【中文标题】iOS dateFormatter dateFromString 月份问题【英文标题】:iOS dateFormatter dateFromString month issue 【发布时间】:2011-11-11 00:44:41 【问题描述】:

希望这只是一个快速的,我错过了一些简单的东西......

我有一个 NSDateFormatter,用于将字符串 2011-11-10 转换为 Date 对象。

NSDateFormatter *fmtDate = [[NSDateFormatter alloc] init];
[fmtDate setDateFormat:@"YYYY-MM-DD"];

// input of 2011-11-10, output of 2011-01-10 00:00:00 +0000        
[appointment setDate:[fmtDate dateFromString:
  [tempAppointment objectForKey:@"date"]
]];

NSDateFormatter 的返回值存储在 managedObjectContext 中。我的问题是 dateFormatter 将日期返回为 2011-01-10 00:00:00 +0000

为什么将月份从 11 月缩短到 1 月?它可以保留年份和日期,但不能保留月份。

我是否需要在存储日期时包括小时?还是和我设置的格式有关?

【问题讨论】:

【参考方案1】:

为“使用格式字符串指定自定义格式”部分中指定的here 格式尝试格式@"yyyy-MM-dd"。它有一个示例并将 YYYY 列为常见错误。

【讨论】:

这没什么区别,我还在 2011-01-10 00:00:00 +000 啊我错过了d!对,我更改了 YYYY -> yyyy 但修复它的是 DD -> dd。谢谢!【参考方案2】:

您的日期格式字符串使用 YYYY 时不正确。试试 yyyy-M-d 或 yyyy-MM-dd

NSString *dateString = @"2011-11-10";

NSDateFormatter *fmtDate = [[NSDateFormatter alloc] init];
[fmtDate setDateFormat:@"yyyy-M-d"];

NSDate *date = [fmtDate dateFromString:dateString];
NSLog(@"date: %@", date);

输出:

2011-11-10 20:01:40.638 Craplet[81514:707] date: 2011-11-10 05:00:00 +0000

见:

http://unicode.org/reports/tr35/tr35-10.html#Date_Format_Patterns

【讨论】:

以上是关于iOS dateFormatter dateFromString 月份问题的主要内容,如果未能解决你的问题,请参考以下文章

DateFormatter 中的内存泄漏

DateFormatter 不转换特定日期 (Swift)

在swift中使用DateFormatter时发生错误[重复]

Dateformatter 返回零日期

Swift DateFormatter 提取时间

DateFormatter 返回错误的时间[重复]