我正在尝试将字符串转换为Date类型。我正在尝试将时间转换为本地时间,但是输出却很奇怪。这是我正在使用的功能以及得到的结果。我使用的字符串输入看起来像是“上午10:15:
下面的函数返回一个字符串,但这只是看输出,最终它将返回一个Date。
func convertTime(date: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm a"
dateFormatter.locale = Locale.current
print(Locale.current.identifier)
print(TimeZone.current.identifier)
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
if let formattedTime = dateFormatter.date(from: date) {
let userFormatter = DateFormatter()
userFormatter.timeStyle = .short // Set as desired
return userFormatter.string(from: formattedTime)
} else {
return "Unknown date"
}
}
输出的第一部分是输入字符串,第二部分是转换时间。我希望获得美国/丹佛时区的转换时间,但事实并非如此。
en_US
America/Denver
Input String: 10:58 AM, Output String: 3:58 AM
en_US
America/Denver
Input String: 7:43 PM, Output String: 12:43 PM
en_US
America/Denver
Input String: 12:14 PM, Output String: 5:14 AM
答案 0 :(得分:0)
您的输出对您发布的代码是正确的。您将字符串“ 10:58 AM”视为第一年中的UTC时间。这是因为时间字符串没有日期,并且因为您在日期格式器上设置了UTC时区。
您将在本地时间获得“ 3:58 AM”的输出(这对您来说是丹佛)。丹佛通常为UTC-7(夏令时为UTC-6)。
如果您的目标是将UTC时间转换为用户的本地时间(在这种情况下为丹佛),则您的代码运行正常。
如果您想将原始字符串视为本地时间,而您的目标只是更改格式,请不要在第一个日期格式器上设置location
。
不相关,但无需使用以下行:
timeZone
因为日期格式化程序默认为当前语言环境。