【问题标题】:Why does NSDateFormatter not return nil when given empty string ("")为什么给定空字符串(“”)时NSDateFormatter不返回nil
【发布时间】:2016-10-29 04:45:43
【问题描述】:

我有一个简单的问题。 根据苹果官方文档 https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/#//apple_ref/occ/instm/NSDateFormatter/dateFromString:

NSDateFormatter.dateFromString(String) 会返回

使用接收器的当前设置解释的字符串的日期表示。如果 dateFromString: 无法解析字符串,则返回 nil。

那么当我给它一个空字符串“”时,它应该返回nil吗? 当我在操场上这样做时

let date = ""
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyyMMdd"
print(dateFormatter.dateFromString(date))

它给了我

"Optional(1999-12-31 15:00:00 +0000)\n"

这是正常的行为吗? 还是我做错了什么?

谢谢

【问题讨论】:

  • 我同意这有点奇怪,但考虑到您的时区可能是 GMT+9,结果是有道理的。如果你的日期格式是yyyy-MM-dd,你会得到nil
  • 你说得对,当我将其更改为“yyyy-MM-dd”时,NSDateFormatter 给了我 nil。我也认为在给定不同的日期格式时它的响应不同是很奇怪的,这应该就是它解析字符串的方式

标签: ios iphone swift nsdateformatter


【解决方案1】:

如果 dateFromString: 无法解析字符串,则返回 nil

简单的答案是,dateFromString 确实能够解析一个空的string。如果您尝试在string 中输入错误数据,例如"0",那么您将得到nil

为什么会这样?我认为这只是类的编写方式,因为日期格式化程序确实会跳过丢失的数据并尝试完成它。可能不存在“全部丢失”的情况。

【讨论】:

  • 日期格式“yyyyMMdd”和“yyyyMM”接受空输入字符串,但日期格式“yyyy”不接受。在其他情况下,丢失的数据不仅仅是“完成”。例如,“yyyyMMddHHmm”格式不接受输入“2015”或“20150101”。 – 所以这并不能完全解释它。
  • 是的。我想这就是我所说的,尝试完成缺失的输入。如果它不管理它返回 nil。
【解决方案2】:

没错。如果无法解析字符串,它将返回 nil,但如果您使用空字符串,则默认返回该日期。

"" 更改为" " 或任何内容以填充它,如果它是您想要获得的nil

【讨论】:

    猜你喜欢
    • 2016-02-23
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 2011-03-07
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多