如何本地化 swift 中的时间?
How to localize the hours in swift?
这是API响应
{
"session_start_time": "09:05:00",
"session_end_time": "15:18:00"
}
这些时间基于 UTC +0 时区,我需要将它们转换为用户时区并显示给用户。
我该怎么做?
首先为您的响应创建一个结构,例如:
struct SessionData: Codable {
let sessionStartTime: String
let sessionEndTime: String
enum CodingKeys: String, CodingKey {
case sessionStartTime = "session_start_time"
case sessionEndTime = "session_end_time"
}
}
然后将您的 json 解码为 SessionData 并使用以下行:
let dateGetter = NSDateFormatter()
dateGetter.dateFormat = "HH-mm-ss"
let datePrinter = NSDateFormatter()
datePrinter.timeZone = NSTimeZone(abbreviation: "GMT") //GMT stands for prefered time zone
datePrinter.dateFormat = "HH"
let date: NSDate? = dateGetter.dateFromString(yourSessionData.sessionStartTime)
print(datePrinter.stringFromDate(date!))
经过几天的搜索,我找到了这个答案
然后用这个函数找到写入解决方案:
private func utcToLocal(dateStr: String) -> String? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm:ss"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
if let date = dateFormatter.date(from: dateStr) {
dateFormatter.timeZone = TimeZone.autoupdatingCurrent
dateFormatter.dateFormat = "HH:mm"
let tz = TimeZone.current
if tz.isDaylightSavingTime(for: Date()) {
// Summertime
let calendar = Calendar.current
if let summerDate = calendar.date(byAdding: .hour, value: 1, to: date) {
return dateFormatter.string(from: summerDate)
}else {
return dateFormatter.string(from: date)
}
}else {
return dateFormatter.string(from: date)
}
}
return nil
}
这是API响应
{
"session_start_time": "09:05:00",
"session_end_time": "15:18:00"
}
这些时间基于 UTC +0 时区,我需要将它们转换为用户时区并显示给用户。
我该怎么做?
首先为您的响应创建一个结构,例如:
struct SessionData: Codable {
let sessionStartTime: String
let sessionEndTime: String
enum CodingKeys: String, CodingKey {
case sessionStartTime = "session_start_time"
case sessionEndTime = "session_end_time"
}
}
然后将您的 json 解码为 SessionData 并使用以下行:
let dateGetter = NSDateFormatter()
dateGetter.dateFormat = "HH-mm-ss"
let datePrinter = NSDateFormatter()
datePrinter.timeZone = NSTimeZone(abbreviation: "GMT") //GMT stands for prefered time zone
datePrinter.dateFormat = "HH"
let date: NSDate? = dateGetter.dateFromString(yourSessionData.sessionStartTime)
print(datePrinter.stringFromDate(date!))
经过几天的搜索,我找到了这个答案
然后用这个函数找到写入解决方案:
private func utcToLocal(dateStr: String) -> String? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm:ss"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
if let date = dateFormatter.date(from: dateStr) {
dateFormatter.timeZone = TimeZone.autoupdatingCurrent
dateFormatter.dateFormat = "HH:mm"
let tz = TimeZone.current
if tz.isDaylightSavingTime(for: Date()) {
// Summertime
let calendar = Calendar.current
if let summerDate = calendar.date(byAdding: .hour, value: 1, to: date) {
return dateFormatter.string(from: summerDate)
}else {
return dateFormatter.string(from: date)
}
}else {
return dateFormatter.string(from: date)
}
}
return nil
}