无法将时间戳日期转换为 swift 中的字符串 4
can't convert time stamp date to string in swift 4
我正在尝试将时间戳字符串日期转换为日期。
结果总是returns nil。
func getDatefromTimeStamp (str_date : String , strdateFormat: String) -> String {
// stringDate '2018-01-01T00:00:00.000+03:00'
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) as TimeZone!
let date = dateFormatter.date(from: str_date)
dateFormatter.dateFormat = strdateFormat
let datestr = dateFormatter.string(from: date!)
return datestr
}
首先我强烈建议你使用守卫而不是部队
其次为什么要设置两次日期格式?第一次是 dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 然后几行之后用你传入的参数重置它 dateFormatter.dateFormat = strdateFormat。选择一个并将其设置在开头 - 这可能会导致您的问题
第三,如果以上不是问题 - 请确保您的日期完全符合必要的格式,如果完全错误,它将 return 为零。即使是空格和冒号也必须是完美的,我建议使用字符串生成器来确保它们是一致的
您的主要问题是格式 "yyyy-MM-dd'T'HH:mm:ssZ"
与 "2018-01-01T00:00:00.000+03:00"
等字符串不匹配。该字符串包含毫秒,但您的格式没有。
将您的格式更新为 "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
。
这将修复 nil
结果。
那么你应该清理你对 NSTimeZone
的使用。只需使用 TimeZone
.
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
但是在解析这个字符串的时候不需要设置时区,因为这个字符串包含了时区信息。
但是,在将生成的 Date
转换为新的 String
时,您可能需要也可能不需要设置时区。这取决于你想要什么结果。
您想要 UTC 时间的最终字符串(这是您将使用当前代码获得的结果)还是您想要用户本地时间的最终字符串?
如果您想要用户本地时间的最终字符串,则根本不要设置时区 属性。它将默认为当地时间。
我正在尝试将时间戳字符串日期转换为日期。
结果总是returns nil。
func getDatefromTimeStamp (str_date : String , strdateFormat: String) -> String {
// stringDate '2018-01-01T00:00:00.000+03:00'
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) as TimeZone!
let date = dateFormatter.date(from: str_date)
dateFormatter.dateFormat = strdateFormat
let datestr = dateFormatter.string(from: date!)
return datestr
}
首先我强烈建议你使用守卫而不是部队
其次为什么要设置两次日期格式?第一次是 dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 然后几行之后用你传入的参数重置它 dateFormatter.dateFormat = strdateFormat。选择一个并将其设置在开头 - 这可能会导致您的问题
第三,如果以上不是问题 - 请确保您的日期完全符合必要的格式,如果完全错误,它将 return 为零。即使是空格和冒号也必须是完美的,我建议使用字符串生成器来确保它们是一致的
您的主要问题是格式 "yyyy-MM-dd'T'HH:mm:ssZ"
与 "2018-01-01T00:00:00.000+03:00"
等字符串不匹配。该字符串包含毫秒,但您的格式没有。
将您的格式更新为 "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
。
这将修复 nil
结果。
那么你应该清理你对 NSTimeZone
的使用。只需使用 TimeZone
.
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
但是在解析这个字符串的时候不需要设置时区,因为这个字符串包含了时区信息。
但是,在将生成的 Date
转换为新的 String
时,您可能需要也可能不需要设置时区。这取决于你想要什么结果。
您想要 UTC 时间的最终字符串(这是您将使用当前代码获得的结果)还是您想要用户本地时间的最终字符串?
如果您想要用户本地时间的最终字符串,则根本不要设置时区 属性。它将默认为当地时间。