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

从Unix时间戳获取日期时间时返回错误日期的问题排查

解决Unix时间戳转日期显示错误的问题

大概率是这两个常见原因导致你拿到错误日期的,我来帮你排查和修正:

1. 先确认时间戳的单位是否匹配

你代码里用的NSDate(timeIntervalSince1970:)是专门处理秒级Unix时间戳的,但很多后端接口返回的是毫秒级的时间戳(通常是13位数字)。如果直接把毫秒级数值传进去,计算出来的日期会偏差极大(要么跳到几十亿年后,要么回到几十年前)。

修正方法很简单,把时间戳先除以1000转成秒:

func getDateFromStamp(timeInterval:Int) -> String{ 
    // 若你的时间戳是毫秒级,必须除以1000转成秒
    let date = NSDate(timeIntervalSince1970: TimeInterval(timeInterval) / 1000) 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "EEEE, MMM d, h:mm a" 
    let dateString = dateFormatter.string(from: date as Date) 
    return dateString 
}

2. 明确设置时区(避免设备时区差异)

DateFormatter默认会使用当前设备的系统时区,但如果你的业务需要统一用服务器时区(比如UTC),或者要确保不同时区的设备显示一致的日期,就必须手动指定时区:

比如设置为UTC时区的示例:

func getDateFromStamp(timeInterval:Int) -> String{ 
    let date = NSDate(timeIntervalSince1970: TimeInterval(timeInterval) / 1000) 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "EEEE, MMM d, h:mm a" 
    // 明确指定时区,这里用UTC举例,也可以用TimeZone.current获取本地时区
    dateFormatter.timeZone = TimeZone(identifier: "UTC") 
    let dateString = dateFormatter.string(from: date as Date) 
    return dateString 
}

额外小提示

你可以先打印一下传入的timeInterval数值,看它是10位(秒级)还是13位(毫秒级),这能快速定位问题核心;如果是秒级时间戳但日期依然不对,那基本就是时区设置的问题,检查下设备时区或者强制指定你需要的时区即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:26:40