【发布时间】:2014-10-30 10:20:56
【问题描述】:
我有一个string,其中包含一个date,格式如下:
2014 年 9 月 4 日星期四 10:50:12 +0000
您知道如何将其转换为: 2014 年 4 月 9 日 (dd-MM-yyyy)
当然,使用 Swift
【问题讨论】:
标签: string date swift format nsdate
我有一个string,其中包含一个date,格式如下:
2014 年 9 月 4 日星期四 10:50:12 +0000
您知道如何将其转换为: 2014 年 4 月 9 日 (dd-MM-yyyy)
当然,使用 Swift
【问题讨论】:
标签: string date swift format nsdate
试试这样的:
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/
【讨论】:
如果上述方法不起作用,这应该可以解决问题:
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")
【讨论】:
我知道该问题的答案已被接受,但该答案中显示的方法并未完全以 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()
输出:04-09-2014
您可以更改这两个函数中的格式以接受和输出各种格式的日期。
【讨论】:
从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()))"
}
【讨论】: