将Int转换为日期格式化程序,后跟时区



尝试将Int转换为带时区值和格式化程序的格式化字符串日期,以获得预期结果"12/01/2022 09:03:41 PM ">.

//响应数据。

{
"code": "THA",
"name": "Thailand Standard Time (THA) (UTC+07)",
"offset": 25200,
"utc_offset": "UTC+07",
"region": "Asia/Phnom_Penh"
}

我从api响应代码中选择了时区,这是我实现的。

var timezoneCode = response.timeZone.code ?? ""
if let updatedOn = self.dict?["updated_on"]?.intValue{ // i.e., 1669903421000
let dateValue =  Date(milliseconds: Int64(updatedOn))
stringDate = dateToStringTimeZone(date: dateValue, dateFormat: "MM/dd/yyyy hh:mm:ss a zzz", timeZone: timezoneCode)
}

//将数据转换为带有时区/日期格式的字符串

func dateToStringTimeZone(date: Date, dateFormat: String, timeZone: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
dateFormatter.locale = Locale.init(identifier: "en_US_POSIX")
dateFormatter.timeZone = TimeZone.init(abbreviation: timeZone)
let dateStr = dateFormatter.string(from: date)
return dateStr
}

//日期扩展

extension Date {
var millisecondsSince1970: Int64 {
return Int64((self.timeIntervalSince1970 * 1000.0).rounded())
}
init(milliseconds: Int64) {
self = Date(timeIntervalSince1970: TimeInterval(milliseconds) / 1000)
}
}

尝试后,上面的代码产生字符串日期

"12/01/2022 07:33:41 PM GMT + 5:30"

是否有人知道如何实现如下所示的格式化日期值?

"12/01/2022 09:03:41点THA"

代替"在日期格式字符串

中直接使用您想要的时区代码
"MM/dd/yyyy hh:mm:ss a '(timezoneCode)'"

你还需要使用另一个init为TimeZone,使用offset属性似乎工作

let offset = response.timeZone.offset
dateFormatter.timeZone = TimeZone(secondsFromGMT: offset)

最新更新