gpt4 book ai didi

mysql - Swift 3 解析日期字符串

转载 作者:搜寻专家 更新时间:2023-11-01 07:13:59 24 4
gpt4 key购买 nike

我正在尝试将从 MySQL Date 数据类型返回的字符串解析为本地日期。但是,每次我尝试在 Swift 3 中使用 DateFormatter() 解析它时,结果日期都是两天。

这是从服务器返回的日期字符串的示例:

“2016 年 12 月 31 日星期六 00:00:00 GMT-0800(太平洋标准时间)”

我尝试使用 DateFormatter() 以下列格式字符串捕获该信息:

let DatFormatServerTwo = "EEE MMM dd yyyy HH':'mm':'ss zzzZ '('zzz')'"

然后我这样使用它:

 static func stringDateToDateTwo(dateString: String, timeZone: TimeZone = TimeZone.current) -> Date {
dateFormatter.dateFormat = DateFormatServerTwo
dateFormatter.timeZone = timeZone
return dateFormatter.date(from: dateString) ?? Date()
}

其中 dateFormatter 被分配给一个 DateFormatter()

我认为问题在于时区存在偏差,我没有正确捕获该信息。我通过切断日期字符串的一部分来获得所需的日期,即只要 TimeZone 的东西进入图片。我不想每次都这样做,因为它很乱。

以下是我如何截断字符串以从服务器获取我想要的日期:

 var holidayDateArray = holidayDate.characters.split{$0 == " "}.map(String.init)
var count = 0
var newString = ""
for substring in holidayDateArray {
if count < 5 {
newString.append(substring)
} else {
break
}
count += 1
}

然后我这样格式化:

 static let DateFormatServerTwo = "EEEMMMddyyyyHH':'mm':'ss"

最佳答案

一个问题是 GMT-XXXX 格式的时区没有格式说明符。 GMT-XX:XX 有一个,但你没有那种格式。因此,此解决方案是将 GMT 视为文字,并使用 Z 说明符仅解析 -XXXX 部分。最终结果是一样的。

另请注意,无需引用标点符号,只需按字面意思对待字母即可。也无需设置格式化程序的时区,因为您将从日期字符串中获取时区信息。

根本不需要处理字符串。只需使用正确的格式:

let str = "Sat Dec 31 2016 00:00:00 GMT-0800 (PST)"
let fmt = DateFormatter()
fmt.dateFormat = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z (z)"
let dt = fmt.date(from:str)

这给出了给定字符串的 dt 的正确结果。

关于mysql - Swift 3 解析日期字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43289064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com