在 Swift 3.1 中使用 DateFormatter 正确构建 dateFormat 以解析时间

Posted

技术标签:

【中文标题】在 Swift 3.1 中使用 DateFormatter 正确构建 dateFormat 以解析时间【英文标题】:Proper construction of dateFormat to parse time using DateFormatter in Swift 3.1 【发布时间】:2017-03-06 20:19:31 【问题描述】:

我在构建 dateFormat 以解析预定义格式的时间时使用了错误的文档。 maddy(下)提供了正确文档的链接。

这是我使用错误格式时发生的情况:

var idf = DateFormatter()
idf.locale = Locale(identifier: "en_US")
idf.dateStyle = .none
idf.dateFormat = "hh:MM:SSa"

// Of the variables defined here, the only one that doesn't cause an error 
// is the last one:
var sMidnight: String = "12:00:00AM"
var sEarly: String = "12:40:22AM"
var sMorning: String = "6:00:00AM"
var sNoon: String = "12:00:00PM"
var sAfternoon: String = "12:30:22PM"
var sEvening: String = "7:05:45PM"

// Put any of the variables besides sEvening here and you get a crash.
// "fatal error: unexpectedly found nil while unwrapping an Optional value"
var date: Date = idf.date(from: sEvening)!

print(idf.string(from: date)) // prints 07:05:45 PM

【问题讨论】:

请参阅有关格式说明符的文档。你用错了。 【参考方案1】:

MM 是两位数的月份编号。 SS 是小数秒。请查看与格式说明符相关的the documentation。

你想要:

"h:mm:ssa"

适合您的格式。

【讨论】:

谢谢。我无法找到正确的文档。这解决了问题。 很高兴为您提供帮助。请不要忘记接受可以解决您问题的答案。您似乎还没有回答任何问题。

以上是关于在 Swift 3.1 中使用 DateFormatter 正确构建 dateFormat 以解析时间的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 3.1 中使用 DateFormatter 正确构建 dateFormat 以解析时间

SwiftyJson 无法导入在 3.0.2 中使用 Carthage 编译的 Swift 3.1 模块中

在 Swift 3.1 中,不推荐使用 UnsafeMutablePointer.initialize(from:)

Swift 3.1 中的 CocoaTouch 类

使用 Swift 4.0 编译的模块无法在 Swift 3.1 中导入框架二进制文件

如果在 swift 3.1 中可选绑定到 any 时如何使用 if let