Swift - 日期格式化程序返回不需要的时间

问题描述 投票:1回答:1

如果我将“2019-01-01T00:00:00 + 0000”转换为日期,我希望日期为字符串中的日期 - 2019年1月1日。如果我计算时间部分的秒数,我希望结果为零。

问题是,当我将我的字符串转换为日期时,它存储在UTC时区中。我的语言环境设置为“en_US_POSIX”,我的时区设置为当前。我的日期格式化程序使用“yyyy-MM-dd'T'HH:mm:ssZ”。我知道最后的Z意味着UTC,但我似乎无法找出正确的字段符号来获得我想要的结果。

func convertToDate(_ dateString: String) -> Date {
   let dateFormatter = DateFormatter()
   dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
   dateFormatter.locale = Locale(identifier: "en_US_POSIX")
   dateFormatter.timeZone = .current
   let date = dateFormatter.date(from: dateString)
      else {
         print("DATE ERROR:", dateString)
         return Date()
      }
   return date
} 
swift date
1个回答
3
投票

如果您确定要解析的日期字符串将始终以+XXXX形式的时区结束,那么您可以从字符串中删除该时区,然后将剩余的字符串解析为本地时间。

func convertToDate(_ dateString: String) -> Date? {
    let minusTZ = String(dateString.dropLast(5)) // Assume the string ends with a +9999 timezone
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    let date = dateFormatter.date(from: minusTZ)
    return date
}

无论原始字符串的时区如何,这都将为您提供原始字符串中具有相同日期和时间的本地日期。

© www.soinside.com 2019 - 2024. All rights reserved.