【问题标题】:Conversion from string to date in swift returns nil快速从字符串转换为日期返回 nil
【发布时间】:2017-03-13 03:05:38
【问题描述】:

我在 swift 3 中将字符串转换为日期时遇到问题。这是我的代码,它在转换时返回一个 nil 值。

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy hh:mm:ss +zzzz"
dateFormatter.locale = Locale.init(identifier: "bg_BG")

let recdate = dateFormatter.date(from:"Fri, 10 Mar 2017 15:03:03 +0530")!;`

【问题讨论】:

    标签: ios swift nsdateformatter


    【解决方案1】:

    您为小时和时区设置了错误的格式说明符。使用这个:

    dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss Z"
    dateFormatter.locale = Locale(identifier: "en_US")
    
    • hh 表示 12 小时格式,因此没有 15 小时。请改用 HH
    • +zzzz 是无效的时区说明符。请改用Z
    • 除非星期五在保加利亚语中缩短为 Fri,否则请使用英语语言环境

    【讨论】:

    • 试过这个 E, d MMM yyyy HH:mm:ss ZEEE, dd MMM yyyy HH:mm:ss Z ,还是不行在职的 。我仍然收到 致命错误:在展开可选值时意外发现 nil 2017-03-13 08:52:50.557530 Dubber[1851:1317294] 致命错误:在展开可选值时意外发现 nil跨度>
    • @nikhil 试试dateFormatter.locale = Locale.current,我不知道为什么“bg_BG”不起作用。
    【解决方案2】:

    您有几个问题,首先,正如 Code Different 所指出的,您需要使用 HH 来读取 24 小时时间。但是,您还指定了语言环境,这意味着“单词”部分必须是保加利亚语,而不是英语。保留默认语言似乎可以正常工作:

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss +zzzz"
    //dateFormatter.locale = Locale.init(identifier: "bg_BG")
    let recdate = dateFormatter.date(from:"Fri, 10 Mar 2017 15:03:03 +0530")!
    

    如果您要使用保加利亚的日期和月份名称,您的格式应该可以使用。

    dateFormatter.date(from:"нд, 10 март 2017 15:03:03 +0530")
    

    【讨论】:

      猜你喜欢
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多