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

Swift如何将UTC时区的“时:分:秒 AM/PM”转为用户时区的“时:分 AM/PM”

实现方案

核心逻辑

  • 先用指定格式的DateFormatter把输入的UTC时间字符串解析为标准Date对象,解析器时区固定为UTC
  • 再用目标格式的DateFormatter把Date对象格式化为当前时区的字符串,自动适配用户本地时区

完整可运行代码

func convertUTCSunriseTimeToLocal(utcTimeStr: String) -> String? {
    // 配置UTC时间解析器
    let utcParser = DateFormatter()
    utcParser.dateFormat = "h:mm:ss a"
    utcParser.timeZone = TimeZone(identifier: "UTC")
    // 固定locale避免系统语言导致AM/PM解析失败
    utcParser.locale = Locale(identifier: "en_US_POSIX")
    
    guard let date = utcParser.date(from: utcTimeStr) else {
        return nil
    }
    
    // 配置本地时间格式化器
    let localFormatter = DateFormatter()
    localFormatter.dateFormat = "h:mm a"
    localFormatter.timeZone = TimeZone.current
    // 如果需要输出AM/PM以外的本地化标识,替换为Locale.current即可
    localFormatter.locale = Locale(identifier: "en_US_POSIX")
    
    return localFormatter.string(from: date)
}

// 调用示例
let result = convertUTCSunriseTimeToLocal(utcTimeStr: "10:3:30 AM")
// 示例输出(东8区场景):6:03 PM

注意事项

  • 不需要你额外获取当前时区的缩写做转换,TimeZone.current会自动读取用户设备的当前时区
  • 解析和格式化时指定en_US_POSIX是为了保证AM/PM的解析和输出符合要求,避免系统语言切换导致的异常
  • 如果转换失败返回nil,可根据业务需要设置默认兜底值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:57:06