Swift中JSON字符串转时间及相关技术问题咨询
解决JSON时间字符串转Date的问题
我来帮你搞定这个时间转换的坑~你现在的问题核心是DateFormatter的格式和你拿到的时间字符串不匹配,所以才转不出来。
先看你的情况:JSON里的data字段是"15:55",只有小时和分钟;但你代码里用的dateFormat是"yyyy-MM-dd'T'HH:mm:ss"——这个格式是给带年月日+时分秒的字符串用的,和"15:55"完全对不上,所以解析肯定失败。
修正后的代码示例
先给你最直接的解决方案,适配"15:55"这种纯时分格式:
if let timeString = json["data"] as? String { print("on Click of in_time Button : \(timeString)") let formatter = DateFormatter() // 重点:把格式改成和输入字符串一致的"HH:mm" formatter.dateFormat = "HH:mm" // 可选但建议:设置时区,避免跨时区的时间偏移 formatter.timeZone = TimeZone.current // 解析成Date对象 if let convertedDate = formatter.date(from: timeString) { print("转换成功的Date对象: \(convertedDate)") // 如果需要转换成带日期的格式展示(比如给用户看) formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" let fullTimeString = formatter.string(from: convertedDate) print("格式化后的完整时间: \(fullTimeString)") } else { print("时间解析失败,请检查格式是否匹配") } }
额外说明
- 关于Date对象的特性:iOS/macOS里的
Date是绝对时间(包含日期+时间),如果你只给时分字符串,DateFormatter会自动用当前系统日期来补全日期部分。如果需要指定特定日期(比如业务里的打卡日期),可以用Calendar和DateComponents来拼接:
if let timeString = json["data"] as? String { let timeFormatter = DateFormatter() timeFormatter.dateFormat = "HH:mm" timeFormatter.timeZone = TimeZone.current if let timeDate = timeFormatter.date(from: timeString) { // 提取时间的小时、分钟组件 let timeComponents = Calendar.current.dateComponents([.hour, .minute], from: timeDate) // 指定你需要的日期(比如2024年5月20日) let targetDateComponents = DateComponents( year: 2024, month: 5, day: 20, hour: timeComponents.hour, minute: timeComponents.minute ) if let targetDate = Calendar.current.date(from: targetDateComponents) { print("指定日期的完整时间: \(targetDate)") } } }
- 时区问题:一定要记得设置
timeZone,不然默认可能用UTC时区,导致你解析出来的时间和预期有偏差(比如国内会差8小时)。
内容的提问来源于stack exchange,提问作者Sandesh Zote
相关产品推荐
相关产品推荐

