swift - Swift 中来自服务器的日期

标签 swift date timezone nsdate nsdateformatter

我在转换来自服务器的日期字符串时遇到问题。下面是我的代码

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)

同样的结果

我试过这些链接

Link1 Link2 Link3等等

但没有成功。

请告诉我上面的代码我做错了什么。

最佳答案

问题的答案:不要从键盘输入连字符/短划线字符或符号。只需从您的控制台窗口复制它(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”。

关于swift - Swift 中来自服务器的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50586855/

相关文章:

java - java中有没有显示星期几的日期格式?

objective-c - 如何为 NSDate 添加 1 天?

c# - 如何使用 SetTimeZoneInformation 取消选中 "Adjust daylight..."?

ios - 如何在 Swift 中从 Firebase 向数组附加过滤器数据

ios - 在swift中找到数据时如何退出while循环?

Excel VBA : Convert a date string to a Unix timestamp

Java System.getProperty( "user.timezone") 不起作用

sql - 带时区的 Postgres 时间戳转换

ios - Swift:TableView Controller 和段值更改

ios - 找不到目标 'x86_64-apple-ios-simulator' 的模块