来自字符串swift的日期格式器

问题描述 投票:0回答:2

我需要像这样的日期2020-03-18T00:00:00转换此字符串2020.03.18 00:00当我尝试这样转换时,我的应用程序崩溃了。

public extension String {

    var dateValue: Date {
        let formatter = DateFormatter()
        formatter.timeZone = .none
        formatter.dateFormat = "yyyy-MM-dd HH:mm"
        return formatter.date(from: self)!
    }

}

有什么想法吗?

swift string date swift5 formatter
2个回答
1
投票

您的日期格式化程序需要包含“ T”

dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'"

0
投票

您需要一个格式化程序才能将2020-03-18T00:00:00的ISO8601格式转换为Date对象。然后,如果您想要2020.03.18 00:00格式的字符串,则可以使用单独的格式化程序。例如:

let iso8601Formatter = DateFormatter()
iso8601Formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
iso8601Formatter.locale = Locale(identifier: "en_US_POSIX")

let formatter = DateFormatter()
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy.MM.dd HH:mm"

func convert(input: String) -> String? {
    guard let date = iso8601Formatter.date(from: input) else { return nil }
    return formatter.string(from: date)
}

let result = convert(input: "2020-03-18T00:00:00") // "2020.03.18 00:00"

[注意,如果您要进行大量转换,则可能不希望将这些格式化程序的实例掩埋在函数中,但请确保实例化它们一次。格式化程序的实例化(和dateFormat字符串的更改)是一个众所周知的计算密集型过程,这就是为什么我将它们设置为属性而不是局部变量的原因。

© www.soinside.com 2019 - 2024. All rights reserved.