【问题标题】:Date from Server in Swift来自 Swift 中服务器的日期
【发布时间】:2018-11-08 06:09:28
【问题描述】:

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

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)

还是一样的结果

我已经尝试过这些链接

Link1Link2Link3

但没有成功。

请让我知道我在上面的代码中做错了什么。

【问题讨论】:

  • 24 小时日期格式是 HH,而不是 hh ...
  • @MartinR 谢谢马丁,我已经尝试过 24 小时制。请查看更新后的问题。
  • 服务器字符串包含“EN-DASH” (U+2013) 作为分隔符,而不是普通的连字符(减号)。
  • @MartinR 谢谢。你拯救了我接下来的几个小时。
  • @Gagan_iOS 请注意,您还有时区问题。有关该问题的信息,请参阅更新的答案。

标签: swift date timezone nsdate nsdateformatter


【解决方案1】:

回答您的问题:不要从键盘输入连字符/破折号或符号。只需从您的控制台窗口复制它(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))")

结果: 日期为:可选(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”。

【讨论】:

  • 这仍然是错误的。解析固定日期格式时,需要将日期格式化程序区域设置为“en_US_POSIX”
  • 谢谢,Krunal 和 Martin.. 在同一问题上,您又为我节省了 2 个小时。
  • 一个建议 - 1. 不需要两个完整的部分来回答。只需发布一个完整的解决方案。 2. 由于您的答案实际上都不是您写的(因为您将所有解决方案归功于两个人),请考虑将此答案社区维基。
  • @Krunal 转到unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns 看看sSz 代表什么。
猜你喜欢
  • 2012-03-04
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 2014-08-07
  • 1970-01-01
相关资源
最近更新 更多