Date Format in Swift
如何从日期转换该日期时间?
From this: 2016-02-29 12:24:26
to: Feb 29, 2016
到目前为止,这是我的代码,它返回nil值:
1 2 3 4 5 | let dateFormatter = NSDateFormatter() dateFormatter.dateFormat ="MM-dd-yyyy" dateFormatter.timeZone = NSTimeZone(name:"UTC") let date: NSDate? = dateFormatter.dateFromString("2016-02-29 12:24:26") print(date) |
您必须声明2个不同的
试试这个代码:
1 2 3 4 5 6 7 8 | let dateFormatterGet = NSDateFormatter() dateFormatterGet.dateFormat ="yyyy-MM-dd HH:mm:ss" let dateFormatterPrint = NSDateFormatter() dateFormatterPrint.dateFormat ="MMM dd,yyyy" let date: NSDate? = dateFormatterGet.dateFromString("2016-02-29 12:24:26") print(dateFormatterPrint.stringFromDate(date!)) |
Swift 3及更高版本:
从Swift 3开始,
1 2 3 4 5 6 7 8 9 10 11 | let dateFormatterGet = DateFormatter() dateFormatterGet.dateFormat ="yyyy-MM-dd HH:mm:ss" let dateFormatterPrint = DateFormatter() dateFormatterPrint.dateFormat ="MMM dd,yyyy" if let date = dateFormatterGet.date(from:"2016-02-29 12:24:26") { print(dateFormatterPrint.string(from: date)) } else { print("There was an error decoding the string") } |
这对于想使用dateformater.dateformat的人可能很有用;
如果要
1 2 3 4 5 6 7 8 9 10 | Wednesday, Sep 12, 2018 --> EEEE, MMM d, yyyy 09/12/2018 --> MM/dd/yyyy 09-12-2018 14:11 --> MM-dd-yyyy HH:mm Sep 12, 2:11 PM --> MMM d, h:mm a September 2018 --> MMMM yyyy Sep 12, 2018 --> MMM d, yyyy Wed, 12 Sep 2018 14:11:54 +0000 --> E, d MMM yyyy HH:mm:ss Z 2018-09-12T14:11:54+0000 --> yyyy-MM-dd'T'HH:mm:ssZ 12.09.18 --> dd.MM.yy 10:41:02.112 --> HH:mm:ss.SSS |
Swift 3及更高版本
1 2 3 4 5 | let dateFormatter = DateFormatter() dateFormatter.dateStyle = .medium dateFormatter.timeStyle = .none dateFormatter.locale = Locale(identifier:"en_US") print(dateFormatter.string(from: date)) // Jan 2, 2001 |
当您要本地化您的应用程序时,这也很有帮助。语言环境(标识符:)使用ISO 639-1代码。
另请参阅Apple文档
迅捷-5.0
1 2 3 4 5 6 7 8 9 10 | let date = Date() let formate = date.getFormattedDate(format:"yyyy-MM-dd HH:mm:ss") // Set output formate extension Date { func getFormattedDate(format: String) -> String { let dateformat = DateFormatter() dateformat.dateFormat = format return dateformat.string(from: self) } } |
迅捷-4.0
2018-02-01T19:10:04 + 00:00转换2018年2月1日
1 2 3 4 5 6 7 8 9 10 11 12 13 | extension Date { static func getFormattedDate(string: String , formatter:String) -> String{ let dateFormatterGet = DateFormatter() dateFormatterGet.dateFormat ="yyyy-MM-dd'T'HH:mm:ssZ" let dateFormatterPrint = DateFormatter() dateFormatterPrint.dateFormat ="MMM dd,yyyy" let date: Date? = dateFormatterGet.date(from:"2018-02-01T19:10:04+00:00") print("Date",dateFormatterPrint.string(from: date!)) // Feb 01,2018 return dateFormatterPrint.string(from: date!); } } |
使用新的
1 2 3 4 5 6 7 8 | let dateFormatterGet = DateFormatter() dateFormatterGet.dateFormat ="yyyy-MM-dd HH:mm:ss" let dateFormatter = DateFormatter() dateFormatter.dateFormat ="MMM dd,yyyy" let date: Date? = dateFormatterGet.date(from:"2017-02-14 17:24:26") print(dateFormatter.string(from: date!)) |
编辑:经过mitul-nakum建议
迅捷3
1 2 3 4 | let date : Date = Date() let dateFormatter = DateFormatter() dateFormatter.dateFormat ="MMM dd, yyyy" let todaysDate = dateFormatter.string(from: date) |
我用以下格式解决了我的问题,格式为
1 2 3 4 5 6 7 8 9 10 11 12 13 | func formatDate(date: String) -> String { let dateFormatterGet = DateFormatter() dateFormatterGet.dateFormat ="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" let dateFormatter = DateFormatter() dateFormatter.dateStyle = .medium dateFormatter.timeStyle = .none // dateFormatter.locale = Locale(identifier:"en_US") //uncomment if you don't want to get the system default format. let dateObj: Date? = dateFormatterGet.date(from: date) return dateFormatter.string(from: dateObj!) } |
带有
1 2 3 4 5 6 7 | extension Date { func string(with format: String) -> String { let dateFormatter = DateFormatter() dateFormatter.dateFormat = format return dateFormatter.string(from: self) } } |
然后,您可以像这样使用它:
1 2 | let date = Date() date.string(with:"MMM dd, yyyy") |
斯威夫特4、4.2和5
1 2 3 4 5 6 7 8 | func getFormattedDate(date: Date, format: String) -> String { let dateformat = DateFormatter() dateformat.dateFormat = format return dateformat.string(from: date) } let formatingDate = getFormattedDate(date: Date(), format:"dd-MMM-yyyy") print(formatingDate) |
如果要分析" 1996-12-19T16:39:57-08:00"中的日期,请使用以下格式" yyyy-MM-dd'T'HH:mm:ssZZZZZ":
1 2 3 4 5 6 7 8 | let RFC3339DateFormatter = DateFormatter() RFC3339DateFormatter.locale = Locale(identifier:"en_US_POSIX") RFC3339DateFormatter.dateFormat ="yyyy-MM-dd'T'HH:mm:ssZZZZZ" RFC3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0) /* 39 minutes and 57 seconds after the 16th hour of December 19th, 1996 with an offset of -08:00 from UTC (Pacific Standard Time) */ let string ="1996-12-19T16:39:57-08:00" let date = RFC3339DateFormatter.date(from: string) |
来自Apple https://developer.apple.com/documentation/foundation/dateformatter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import UIKit // Example iso date time let isoDateArray = [ "2020-03-18T07:32:39.88Z", "2020-03-18T07:32:39Z", "2020-03-18T07:32:39.8Z", "2020-03-18T07:32:39.88Z", "2020-03-18T07:32:39.8834Z" ] let dateFormatterGetWithMs = DateFormatter() let dateFormatterGetNoMs = DateFormatter() // Formater with and without millisecond dateFormatterGetWithMs.dateFormat ="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" dateFormatterGetNoMs.dateFormat ="yyyy-MM-dd'T'HH:mm:ss'Z'" let dateFormatterPrint = DateFormatter() dateFormatterPrint.dateFormat ="MMM dd,yyyy" for dateString in isoDateArray { var date: Date? = dateFormatterGetWithMs.date(from: dateString) if (date == nil){ date = dateFormatterGetNoMs.date(from: dateString) } print("===========>",date!) } |
格式化日期的另一种可能。此屏幕截图属于Apple的应用程序"新闻"。
这是代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | let dateFormat1 = DateFormatter() dateFormat1.dateFormat ="EEEE" let stringDay = dateFormat1.string(from: Date()) let dateFormat2 = DateFormatter() dateFormat2.dateFormat ="MMMM" let stringMonth = dateFormat2.string(from: Date()) let dateFormat3 = DateFormatter() dateFormat3.dateFormat ="dd" let numDay = dateFormat3.string(from: Date()) let stringDate = String(format:"%@\ %@ %@", stringDay.uppercased(), stringMonth.uppercased(), numDay) |
没有任何东西可以添加到lorenzoliveto提出的替代方案中。太完美了。
1 2 3 4 | let dateFormat = DateFormatter() dateFormat.dateFormat ="EEEE\ MMMM dd" let stringDate = dateFormat.string(from: Date()).uppercased() |
只需使用下面的函数来转换日期格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | let convertedFormat = convertToString(dateString:"2019-02-12 11:23:12", formatIn:"yyyy-MM-dd hh:mm:ss", formatOut:"MMM dd, yyyy") //calling function print(convertedFormat) // feb 12 2019 func convertToString (dateString: String, formatIn : String, formatOut : String) -> String { let dateFormater = DateFormatter() dateFormater.timeZone = NSTimeZone(abbreviation:"UTC") as TimeZone! dateFormater.dateFormat = formatIn let date = dateFormater.date(from: dateString) dateFormater.timeZone = NSTimeZone.system dateFormater.dateFormat = formatOut let timeStr = dateFormater.string(from: date!) return timeStr } |
要将2016-02-29 12:24:26转换为日期,请使用以下日期格式:
1 2 | let dateFormatter = NSDateFormatter() dateFormatter.dateFormat ="yyyy-MM-dd hh:mm:ss" |
编辑:要获取输出,2016年2月29日,请使用以下日期格式:
1 2 | let dateFormatter = NSDateFormatter() dateFormatter.dateFormat ="MMM dd, yyyy" |
对于Swift 4.2、5
按照您希望的方式传递日期和格式。
要选择可以访问的格式,请访问NSDATEFORMATTER网站:
1 2 3 4 5 | static func dateFormatter(date: Date,dateFormat:String) -> String { let dateFormatter = DateFormatter() dateFormatter.dateFormat = dateFormat return dateFormatter.string(from: date) } |
将其放在扩展名中,并按如下所示进行调用。在整个应用程序中都很容易使用。
1 | self.getFormattedDate(strDate:"20-March-2019", currentFomat:"dd-MMM-yyyy", expectedFromat:"yyyy-MM-dd") |
实作
1 2 3 4 5 6 7 8 9 | func getFormattedDate(strDate: String , currentFomat:String, expectedFromat: String) -> String{ let dateFormatterGet = DateFormatter() dateFormatterGet.dateFormat = currentFomat let date : Date = dateFormatterGet.date(from: strDate)! dateFormatterGet.dateFormat = expectedFromat return dateFormatterGet.string(from: date) } |
我建议默认添加时区。我将以Swift 5为例
1.新建一个扩展文件
1 2 3 4 5 6 7 8 9 10 | import Foundation extension Date { func getFormattedDateString(format: String) -> String { let dateFormatter = DateFormatter() dateFormatter.dateFormat = format dateFormatter.timeZone = TimeZone.current return dateFormatter.string(from: self) } } |
1 2 3 4 5 | let date = Date() let dateString = date.getFormattedDateString(format:"yyyy-MM-dd HH:mm:ss") print("dateString > \\(dateString)") // dateString > 2020-04-30 15:15:21 |
迅捷3
1 2 3 4 5 6 7 8 9 | func dataFormat(dataJ: Double) -> String { let dateFormatter = DateFormatter() dateFormatter.dateStyle = .long dateFormatter.timeStyle = .none let date = Date(timeIntervalSince1970: dataJ) return (dataJ != nil) ?"Today, \\(dateFormatter.string(from: date))" :"Date Invalid" } |