NSDateFormatter dateFromString总是返回nil

我想提前道歉提出一个重复的问题,但其他解决scheme还没有为我工作。 每次我尝试将datestring传递给dateFromString函数时,我都会得到nil。 自从iOS 7更新以来,我还没有看到任何事情发生了变化,但是如果这对于是否仍然以相同的方式工作有所影响,我现在正在进行更新。

这是我用来从string创builddate的代码:

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

我已经设置了我的dateFormat基于我已阅读的所有解决scheme来解决这个问题,但这些设置都没有解决问题。 systemLocale绝对是为英语设置的,所以不应该引起任何问题。

这是我传递给dateFromString的dateString:

 Wednesday, October 9, 2013 at 2:40:29 PM Pacific Daylight Time 

谢谢您的帮助!

这里有两个问题:

  1. 格式化程序期待的datestring的格式( @"yyyy-MM-dd hh:mm:ss" )与您试图parsing的datestring的格式不同( @"EEEE, MMMM d, yyyy 'at' h:mm:ss a zzzz" )。

  2. 将格式化程序的语言环境设置为[NSLocale systemLocale]导致[dateFormat dateFromString:]返回nil 。 将其设置为[NSLocate currentLocale]

格式化程序的完整代码应该是:

  NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setTimeZone:[NSTimeZone systemTimeZone]]; [dateFormat setLocale:[NSLocale currentLocale]]; [dateFormat setDateFormat:@"EEEE, MMMM d, yyyy 'at' h:mm:ss a zzzz"]; [dateFormat setFormatterBehavior:NSDateFormatterBehaviorDefault]; NSDate *date = [dateFormat dateFromString:dateString]; 

还有一种方法是,如果你使用hh ,你的工作时间是在24小时的时钟上,而在这种情况下,你需要HH (或H ,用于零填充)。

那是:

  • 格式:yyyy-MM-DD hh:mm:ss,string:“2016-03-01 13:42:17”将返回零
  • 格式:yyyy-MM-DD HH:mm:ss,string:“2016-03-01 13:42:17”将返回你期望的date。

给@neilco的帽子提示(见他的回答下面的评论)。 如果你喜欢这个答案,也请投票给他。

根据NSDateFormatter文档 :

使用固定格式date(如RFC 3339)时,可以将dateFormat属性设置为指定格式string。

如果您的date格式是2017-06-16T17:18:59.082083Z那么dateFormat属性应该看起来像这样yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ

Swift 3

 let dateFormatter = DateFormatter() let date = "2017-06-16T17:18:59.082083Z" dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ" let result = dateFormatter.date(from: date) // 2017-06-16 17:18:59 +0000 

你的date格式与你传递的string不匹配,你的dateString应该在你的[dateFormat setDateFormat:@“yyyy-MM-dd hh:mm:ss”];

2013-10-09 02:40:29

nil表示dateFormat对象无法parsing您的string。

您正在尝试使用dateFromString,但是您传递给Formatter的格式与您在dateString中使用的格式不同。

尝试在dateFormat中使用此configuration: E',' M d',' yyyy 'at' hh:mm:ss aa z