从 String 转换为 NSDate 在 Swift 中。

3
我有一个包含日期的字符串,格式如下:Thu, 04 Sep 2014 10:50:12 +0000。请问您知道怎么将其转换为04-09-2014dd-MM-yyyy)的格式吗?当然,需要使用Swift
4个回答

18

如果上述方法不起作用,可以尝试这个:

let formatter = DateFormatter()
formatter.locale = Locale(identifier: "US_en")
formatter.dateFormat = "E, dd MMM yyyy HH:mm:ss Z"
let date = formatter.date(from: "Thu, 04 Sep 2014 10:50:12 +0000")

8

我知道这个问题的答案已经被接受了,但是那个答案中显示的方法并没有完全按照dd-MM-yyyy格式输出日期。所以我还是要发布这篇文章,希望有人会觉得有用。

Swift 的一个很酷的特性就是扩展。因此,我将创建一个扩展,使其可重复使用。

创建一个 NSDate 扩展,并将以下代码放入其中。

import Foundation

extension NSDate {

    convenience init(dateString: String) {
        let dateStringFormatter = NSDateFormatter()
        dateStringFormatter.dateFormat = "E, dd MMM yyyy HH:mm:ss Z"
        dateStringFormatter.timeZone = NSTimeZone(name: "GMT")
        let date = dateStringFormatter.dateFromString(dateString)

        self.init(timeInterval:0, sinceDate:date!)
    }

    func getDatePart() -> String {
        let formatter = NSDateFormatter()
        formatter.dateFormat = "dd-MM-yyyy"
        formatter.timeZone = NSTimeZone(name: "GMT")

        return formatter.stringFromDate(self)
    }
}

这就是如何使用它。

NSDate(dateString: "Thu, 04 Sep 2014 10:50:12 +0000").getDatePart()

输出:2014年04月09日

您可以在这两个函数中更改格式,以接受和输出各种日期格式。


它可以使用dateStringFormatter.locale = NSLocale(localeIdentifier: "en")正常工作,但当我尝试使用另一种语言运行时,它会出现“致命错误:在解包可选值时意外发现nil”。我该如何更改语言? - Zafer Celaloglu

1
尝试类似以下的内容:
let mydateFormatter = NSDateFormatter()
mydateFormatter.dateFormat = "EEE, MMM d, YYYY hh:mm:ss.SSSSxxx"
let date = mydateFormatter.dateFromString(yourdatestring)

如果当前日期格式不起作用,请查看以下链接: http://userguide.icu-project.org/formatparse/datetime/


0

从iOS 15开始,我们可以这样转换:

let strategy = Date.ParseStrategy(format: "\(weekday: .abbreviated), \(day: .twoDigits) \(month: .abbreviated) \(year: .defaultDigits) \(hour: .twoDigits(clock: .twentyFourHour, hourCycle: .zeroBased)):\(minute: .twoDigits):\(second: .twoDigits) \(timeZone: .iso8601(.short))", timeZone: .current)
if let date = try? Date("Thu, 04 Sep 2014 10:50:12 +0000", strategy: strategy) {
    // 04-09-2014
    let dateString = "\(date.formatted(.dateTime.day(.twoDigits)))-\(date.formatted(.dateTime.month(.twoDigits)))-\(date.formatted(.dateTime.year()))"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接