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
谢谢您的帮助!
这里有两个问题:
-
格式化程序期待的datestring的格式(
@"yyyy-MM-dd hh:mm:ss"
)与您试图parsing的datestring的格式不同(@"EEEE, MMMM d, yyyy 'at' h:mm:ss a zzzz"
)。 -
将格式化程序的语言环境设置为
[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