Twitter API返回时间戳解析异常?Swift 4中如何转换格式
解决Twitter时间戳解析问题:Swift 4中的正确转换方案
Hey Zack,我来帮你搞定这个Twitter时间戳的麻烦!
首先明确这个时间的标准:你拿到的Thu May 31 16:43:37 +0000 2018是UTC(协调世界时),也就是格林尼治标准时间,末尾的+0000直接说明它属于UTC时区。你看到的本地时间9:47AM,应该是因为你所在时区是UTC-7(16:43减去7小时就是9:43,可能有几分钟误差是其他因素导致的),核心问题是要把UTC时间正确转换为本地时区的时间,而不是手动截取字符串。
你的现有代码问题在于手动截取字符的方式太脆弱——一旦Twitter调整时间格式的细节(比如缩写、空格),代码很容易崩溃,而且完全没处理时区转换,结果自然不准确。下面是两种正确的实现方式:
一、转换为12小时制本地时间
用Apple官方推荐的DateFormatter来处理,它能自动处理时区和格式匹配,代码更健壮:
func formatTwitterTimeTo12Hour(_ twitterTime: String) -> String? { let inputFormatter = DateFormatter() // 严格匹配Twitter返回的时间格式 inputFormatter.dateFormat = "EEE MMM dd HH:mm:ss ZZZ yyyy" // 明确输入时间是UTC时区 inputFormatter.timeZone = TimeZone(identifier: "UTC") guard let date = inputFormatter.date(from: twitterTime) else { return nil // 解析失败时返回nil,避免崩溃 } // 设置输出格式为12小时制,自动转换为本地时区 let outputFormatter = DateFormatter() outputFormatter.dateFormat = "EEE MMM dd hh:mm a" outputFormatter.timeZone = TimeZone.current return outputFormatter.string(from: date) } // 调用示例 if let formattedTime = formatTwitterTimeTo12Hour("Thu May 31 16:43:37 +0000 2018") { print(formattedTime) // 会输出你的本地时间,比如"Thu May 31 09:43 AM"(对应UTC-7时区) }
关键说明:
dateFormat的格式必须和Twitter返回的字符串完全对应:EEE是星期缩写,MMM是月份缩写,HH:mm:ss是24小时制时间,ZZZ是时区偏移,yyyy是年份。- 先把输入时区设为UTC,确保解析出的
Date对象是准确的时间点,再切换到本地时区输出,就能得到你需要的本地12小时制时间。 hh:mm a中的a会自动根据时间显示AM或PM。
二、转换为timeIntervalSince1970(UNIX时间戳)
同样用DateFormatter解析出Date对象,再调用timeIntervalSince1970即可:
func twitterTimeToUnixTimestamp(_ twitterTime: String) -> TimeInterval? { let formatter = DateFormatter() formatter.dateFormat = "EEE MMM dd HH:mm:ss ZZZ yyyy" formatter.timeZone = TimeZone(identifier: "UTC") guard let date = formatter.date(from: twitterTime) else { return nil } return date.timeIntervalSince1970 } // 调用示例 if let timestamp = twitterTimeToUnixTimestamp("Thu May 31 16:43:37 +0000 2018") { print(timestamp) // 输出对应的UNIX时间戳,比如1527784997.0 }
最后提醒
永远不要手动截取日期字符串来解析,DateFormatter是处理这类问题的标准工具,它能处理时区、本地化、格式变化等各种细节,代码也更易维护。只要确保输入格式和时区设置正确,就能得到准确的结果。
内容的提问来源于stack exchange,提问作者Zack117
相关产品推荐
相关产品推荐

