Swift 4中Unix时间戳转可读日期字符串显示异常问题
解决Unix时间戳转日期显示异常的问题
问题根源
你遇到的问题核心在于时间戳单位不匹配:传入的1518393600000是毫秒级的Unix时间戳,但NSDate(timeIntervalSince1970:)方法接收的是秒级的时间间隔。直接把毫秒数当成秒数传入,相当于把时间往前推了1000倍,自然会显示出1985年的错误日期。
修正方案
我帮你调整了代码,主要做了这几个关键改动:
- 将毫秒级时间戳转换为秒级(除以1000)
- 替换强制解包为安全的可选绑定,避免崩溃
- 自定义日期格式,确保输出完全符合你的预期
修正后的代码
struct myDateRange { var startDate: NSNumber? var endDate: NSNumber? } func configureDate(date: myDateRange) { // 安全解包并转换时间戳单位 guard let timestampMs = date.startDate?.doubleValue else { timeLabel.text = "Invalid Date" return } // 毫秒转秒 let timestampSec = timestampMs / 1000 let date = Date(timeIntervalSince1970: timestampSec) let timeFormat = DateFormatter() // 自定义格式匹配预期输出:MM/dd/yy, HH:mm timeFormat.dateFormat = "MM/dd/yy, HH:mm" // 可按需设置时区,避免时区差异影响显示 timeFormat.timeZone = TimeZone(identifier: "UTC") let currentTime = timeFormat.string(from: date) timeLabel.text = currentTime }
验证结果
当传入Optional(1518393600000)时,转换后的秒级时间戳是1518393600,对应的日期就是2018年2月12日12:00(UTC时区),完全符合你的预期显示。
额外提示
- 尽量避免使用
as!强制解包,一旦startDate为nil会直接崩溃,用guard let或者if let处理可选值更安全 - 如果你的应用面向不同时区用户,记得设置合适的
timeZone,避免日期显示因时区偏移出现偏差
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

