将字符串转换为日期时从 dateFromString 获取 nil

Getting nil from dateFromString when converting string to date

每次我尝试将日期字符串传递给 dateFromString 函数时,我都会得到 nil。自 iOS 7 更新以来,我没有在任何地方读到过任何变化,但如果这对这是否仍然以相同的方式起作用有影响,我正在更新。

这是我用来从字符串创建日期的代码:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];
[dateFormat setLocale:[NSLocale systemLocale]];
[dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
[dateFormat setFormatterBehavior:NSDateFormatterBehaviorDefault];

我的日期字符串是 @"2015-08-22 13:00:00"

NSDate *date = [[NSDate alloc] init];
date = [dateFormat dateFromString:@"2015-08-22 13:00:00"];
return date;

最后一行returns无。

hh 表示 12 小时模式的小时数,13 超出范围。

hh 替换为 HH 以获得 24 小时模式

小写字母表示 12 小时制,大写字母表示 24 小时制。把hh换成HH。

您需要更改:

[dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss"];

与:

[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

因为 hh 指的是 12 小时制而 HH 指的是 24 小时制。

上周我遇到了完全相同的问题,我用这段代码解决了它:

NSDate *date = [NSDate dateWithTimeIntervalSince1970:dateFromString.doubleValue];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *stringDate = [dateFormatter stringFromDate:date];
  • 这里有一个名为 dateFromString 的字符串,因为这是我从服务器收到的日期对象类型。此字符串转换为double值,日期按时间间隔计算。

  • 我想你需要这个日期显示在标签或文本视图或另一个这样的 UI 元素中,正因为如此,我将日期转换为 NSString 以便更容易使用它。这就是我在 stringDate 中的内容。

如果需要更多帮助,请告诉我。