为什么我的DateFormatter .date(from:String)返回nil

时间:2018-10-05 07:27:20

标签: swift date nsdate nsdateformatter

使用此功能将字符串转换为日期对象。
关于SO的类似问题,但是找不到适合我的情况的问题。所以我相信这篇文章不是重复的。

    func convertTimeStringToDate() -> Date {
                //time will be "04:48"
                let dateFormatter = DateFormatter()
                dateFormatter.dateFormat = "HH:mm"
                dateFormatter.dateStyle = .none
                dateFormatter.timeStyle = .short
                dateFormatter.locale = Locale.current
                return dateFormatter.date(from: "04:48")!
            }

该函数返回nil,因此当其解包时会崩溃!我看不到代码有什么问题。

2 个答案:

答案 0 :(得分:2)

这是您的方法应采用的方式。 dateStyletimeStyle再次更改格式。

func convertTimeStringToDate() -> Date {
    //time will be "04:48"
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "HH:mm"
    dateFormatter.locale = Locale.current
    return dateFormatter.date(from: "04:48")!
}

但是,有趣的是,最后一个日期格式被认为是有效的。因此,如果您以相反的顺序设置格式,则可以使用!

PS-我只看到dateStyletimeStyle用于输出格式化。


注意::如果您输入的格式可能会发生变化,则应安全地打开日期包装,并使用默认日期或其他适当的日期,以免崩溃您的应用。 / p>

答案 1 :(得分:1)

请不要设置dateStyle和timeStyle。

func convertTimeStringToDate() -> Date {
    //time will be "04:48"
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "HH:mm"
    dateFormatter.locale = Locale.current
    return dateFormatter.date(from: "04:48")!
}