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

Swift中如何将特定格式时间字符串转为Date并判断是否为昨天?

解决时间戳字符串转Date并判断是否为昨天的问题

你遇到的问题核心是方向搞反了:formatted(.dateTime.day())是把Date转成字符串的方法,而你需要的是把字符串解析成Date类型,再传给isDateInYesterday()。下面是具体解决步骤:

1. 用DateFormatter解析字符串为Date

针对你给出的时间戳格式"December 18, 2022 at 5:34:06 PM UTC",需要配置匹配的格式规则,确保解析准确:

let timestamp = "December 18, 2022 at 5:34:06 PM UTC"
let dateFormatter = DateFormatter()

// 设置与时间戳完全匹配的格式模板
dateFormatter.dateFormat = "MMMM dd, yyyy 'at' h:mm:ss a zzz"
// 强制用英文区域解析月份,避免系统语言影响
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
// 指定时区为UTC,和原时间戳的时区一致
dateFormatter.timeZone = TimeZone(identifier: "UTC")

// 解析字符串为Date实例
if let parsedDate = dateFormatter.date(from: timestamp) {
    // 2. 调用isDateInYesterday()判断
    let isYesterday = Calendar.current.isDateInYesterday(parsedDate)
    print(isYesterday) // 根据实际日期输出true或false
} else {
    print("时间戳格式不匹配,解析失败")
}

关键注意点

  • 格式字符串必须和原时间戳完全对应:'at'是固定文本,用单引号包裹;a对应AM/PM标识;zzz对应时区缩写(如UTC)。
  • 必须设置locale为en_US_POSIX,否则如果系统是中文环境,会无法识别英文月份名称。
  • 时区要和原时间戳保持一致,否则解析出的Date会出现偏差,导致判断结果错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:25:09