You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift日期格式转换异常求助:转换后时间不符

问题分析与解决方案

嘿,我一眼就发现你代码里的问题啦!问题出在解析日期时的时间格式标识符上:

你用了HH:mm a来解析带AM/PM的时间,但HH是用来表示24小时制(00-23)的小时标识,而搭配AM/PM标记的应该用hh(12小时制,01-12)。当你用HH时,DateFormatter无法正确识别AM/PM对应的时段,导致把10 AM错误解析成了00点,最终输出就变成了2018-04-26T00:17。

修正后的代码

只需要把解析阶段的dateFormat改成"MM-dd-yyyy hh:mm a"就可以解决问题了,另外建议不要用强制解包!,避免日期解析失败时崩溃:

let myDateString = "04-26-2018 10:17 AM"
let dateFormatter = DateFormatter()
// 用hh表示12小时制小时,搭配AM/PM
dateFormatter.dateFormat = "MM-dd-yyyy hh:mm a"
// 可选绑定避免强制解包崩溃
if let myDate = dateFormatter.date(from: myDateString) {
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm"
    let somedateString = dateFormatter.string(from: myDate)
    print(somedateString) // 输出:2018-04-26T10:17
} else {
    print("日期解析失败")
}

额外提醒

  • HH:24小时制小时(00-23),不需要AM/PM标记
  • hh:12小时制小时(01-12),必须搭配AM/PM标记(a)才能正确解析时段
  • 始终避免强制解包!,用可选绑定处理可能的解析失败情况

内容的提问来源于stack exchange,提问作者Mike T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:48:29