来自服务器的日期 Swift
Date from Server in Swift
我在转换来自服务器的日期字符串时遇到问题。下面是我的代码
let dateString = "2017–04–02T13:10:00.000" //Date coming from server
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'hh:mm:ss.SSS"
let date = dateFormatter.date(from: dateString)
print("date is :\(String(describing: date))")
但是日志是
date is :nil
*更新为 24 小时格式
以下是 24 小时格式 (HH) 的更新
let dateString = "2017–04–02T13:10:00.000"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
let date = dateFormatter.date(from: dateString)
结果相同
我试过这些链接
等等
但没有成功。
请告诉我上面的代码我做错了什么。
问题的答案:不要从键盘输入 hyphen/dash 字符或符号。只需从您的控制台复制它 window(Web 服务响应打印语句并粘贴到您的日期格式)
试试看:
let dateString = "2017–04–02T13:10:00.000" //Date coming from server
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy–MM–dd'T'HH:mm:ss.SSS"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let date = dateFormatter.date(from: dateString)
print("date is :\(String(describing: date))")
Result:
date is :Optional(2017-04-02 07:40:00 +0000)
另请注意,您遇到了时区问题。您的原始日期字符串不提供任何特定时区。因此,您需要确定字符串代表的时区。因为它来自服务器,所以很可能是 UTC 时间。如果是这样,您需要设置日期格式化程序的timeZone
属性。否则字符串将被解析为用户本地时间。
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
来源:Martin R
服务器字符串包含 "EN-DASH" (U+2013) 作为分隔符,而不是正常的连字符(减号)。
(根据 Leo Dabus 的建议),为您的日期格式化程序设置区域设置标识符 - "en_US_POSIX".
我在转换来自服务器的日期字符串时遇到问题。下面是我的代码
let dateString = "2017–04–02T13:10:00.000" //Date coming from server
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'hh:mm:ss.SSS"
let date = dateFormatter.date(from: dateString)
print("date is :\(String(describing: date))")
但是日志是
date is :nil
*更新为 24 小时格式
以下是 24 小时格式 (HH) 的更新
let dateString = "2017–04–02T13:10:00.000"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
let date = dateFormatter.date(from: dateString)
结果相同
我试过这些链接
但没有成功。
请告诉我上面的代码我做错了什么。
问题的答案:不要从键盘输入 hyphen/dash 字符或符号。只需从您的控制台复制它 window(Web 服务响应打印语句并粘贴到您的日期格式)
试试看:
let dateString = "2017–04–02T13:10:00.000" //Date coming from server
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy–MM–dd'T'HH:mm:ss.SSS"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let date = dateFormatter.date(from: dateString)
print("date is :\(String(describing: date))")
Result: date is :Optional(2017-04-02 07:40:00 +0000)
另请注意,您遇到了时区问题。您的原始日期字符串不提供任何特定时区。因此,您需要确定字符串代表的时区。因为它来自服务器,所以很可能是 UTC 时间。如果是这样,您需要设置日期格式化程序的timeZone
属性。否则字符串将被解析为用户本地时间。
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
来源:Martin R
服务器字符串包含 "EN-DASH" (U+2013) 作为分隔符,而不是正常的连字符(减号)。
(根据 Leo Dabus 的建议),为您的日期格式化程序设置区域设置标识符 - "en_US_POSIX".