Swift - 将字符串转换为日期

Posted

技术标签:

【中文标题】Swift - 将字符串转换为日期【英文标题】:Swift - Convert string to date 【发布时间】:2018-01-04 15:17:32 【问题描述】:

仅在 ios 11+ 上,我有这个错误:当用户在电话时间设置中禁用 24 小时模式时,我的字符串无法使用此代码解析为最新。

在其他iOS版本上,没有问题...

是否缺少强制格式化程序使用 24 小时模式的内容?

变量datebeginHour 来自网络服务。

// input date = 20171201
// input beginHour = 2359

let dateTimeFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "fr_FR")
dateFormatter.timeZone = TimeZone.autoupdatingCurrent
dateTimeFormatter.dateFormat = "yyyyMMdd HHmm"

if let date = dateTimeFormatter.date(from: date+" "+beginHour) 
    // ...

【问题讨论】:

很可能是 ***.com/questions/40692378/… 的副本——在解析固定格式字符串时将格式化程序区域设置为“en_US_POSIX”。 已经试过了,不行。 这很奇怪。你能显示你更新的代码吗? (请复制您的 real 代码,问题中存在“dateTimeFormatter”与“dateFormatter”不一致的问题。) 它在 11.0.3 中工作:在 24 小时禁用模式下测试 let dateTimeFormatter = DateFormatter() dateTimeFormatter.locale = Locale(identifier: "fr_FR") dateTimeFormatter.timeZone = TimeZone.autoupdatingCurrent dateTimeFormatter.dateFormat = " yyyyMMdd HHmm" if let date = dateTimeFormatter.date(from: "20171201"+" "+"2359") print(date) output: 2017-12-01 18:29:00 +0000 这是一个变量名错误...谢谢@Martin R 【参考方案1】:

我认为在您的代码中,您没有使用正确的 dateFormatter, 请检查 dateTimeFormatter 和 dateFormatter,

let dateTimeFormatter = DateFormatter()
dateTimeFormatter.locale = Locale(identifier: "fr_FR")
dateTimeFormatter.timeZone = TimeZone.autoupdatingCurrent
dateTimeFormatter.dateFormat = "yyyyMMdd HHmm"

if let date = dateTimeFormatter.date(from: date+" "+beginHour) 
    // ...

【讨论】:

你在说哪个'dateTimeFormatter'。你能解释一下吗?? 在他的代码中,他可能拼错了 dateFormatter,在第一行中他使用的是 dateTimeFormatter,而在第 2 行和第 3 行中他使用的是 dateFormatter 是的,没有错误,因为在这段代码之前,我有一个名为 dateFormatter 的变量...

以上是关于Swift - 将字符串转换为日期的主要内容,如果未能解决你的问题,请参考以下文章

swift 将日期字符串转换为swift中的日期。

Swift 将日期字符串转换为日期

Swift - 将字符串转换为在正确日期前一天返回的日期[重复]

Swift - 将字符串转换为日期

swift 将时间戳转换为字符串日期

iOS Swift:当字符串包含时区缩写时,如何将特定的日期字符串格式转换为日期对象?