I want to convert \"2014-07-15 06:55:14.198000+00:00\" this string date to NSDate in Swift.
问题:
回答1:
try this:
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = /* find out and place date format from
* http://userguide.icu-project.org/formatparse/datetime
*/
let date = dateFormatter.dateFromString(/* your_date_string */)
For further query, check NSDateFormatter and DateFormatter classes of Foundation framework for Objective-C and Swift, respectively.
Swift 3 and later (Swift 4 included)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = /* date_format_you_want_in_string from
* http://userguide.icu-project.org/formatparse/datetime
*/
guard let date = dateFormatter.date(from: /* your_date_string */) else {
fatalError(\"ERROR: Date conversion failed due to mismatched format.\")
}
// use date constant here
回答2:
Swift 4
import Foundation
let dateString = \"2014-07-15\" // change to your date format
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = \"yyyy-MM-dd\"
let date = dateFormatter.date(from: dateString)
println(date)
Swift 3
import Foundation
var dateString = \"2014-07-15\" // change to your date format
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = \"yyyy-MM-dd\"
var date = dateFormatter.dateFromString(dateString)
println(date)
I can do it with this code.
回答3:
func convertDateFormatter(date: String) -> String
{
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = \"yyyy-MM-dd\'T\'HH:mm:ss.SSSZ\"//this your string date format
dateFormatter.timeZone = NSTimeZone(name: \"UTC\")
let date = dateFormatter.dateFromString(date)
dateFormatter.dateFormat = \"yyyy MMM EEEE HH:mm\"///this is what you want to convert format
dateFormatter.timeZone = NSTimeZone(name: \"UTC\")
let timeStamp = dateFormatter.stringFromDate(date!)
return timeStamp
}
Updated for Swift 3.
func convertDateFormatter(date: String) -> String
{
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = \"yyyy-MM-dd\'T\'HH:mm:ss.SSSZ\"//this your string date format
dateFormatter.timeZone = NSTimeZone(name: \"UTC\") as TimeZone!
let date = dateFormatter.date(from: date)
dateFormatter.dateFormat = \"yyyy MMM EEEE HH:mm\"///this is what you want to convert format
dateFormatter.timeZone = NSTimeZone(name: \"UTC\") as TimeZone!
let timeStamp = dateFormatter.string(from: date!)
return timeStamp
}
回答4:
If you\'re going to need to parse the string into a date often, you may want to move the functionality into an extension. I created a sharedCode.swift file and put my extensions there:
extension String
{
func toDateTime() -> NSDate
{
//Create Date Formatter
let dateFormatter = NSDateFormatter()
//Specify Format of String to Parse
dateFormatter.dateFormat = \"yyyy-MM-dd hh:mm:ss.SSSSxxx\"
//Parse into NSDate
let dateFromString : NSDate = dateFormatter.dateFromString(self)!
//Return Parsed Date
return dateFromString
}
}
Then if you want to convert your string into a NSDate you can just write something like:
var myDate = myDateString.toDateTime()
回答5:
Details
Swift 4, xCode 9.2 / Swift 3, xCode 8.2.1
Date format extensions
import Foundation
extension DateFormatter {
convenience init (format: String) {
self.init()
dateFormat = format
locale = Locale.current
}
}
extension String {
func toDate (format: String) -> Date? {
return DateFormatter(format: format).date(from: self)
}
func toDateString (inputFormat: String, outputFormat:String) -> String? {
if let date = toDate(format: inputFormat) {
return DateFormatter(format: outputFormat).string(from: date)
}
return nil
}
}
extension Date {
func toString (format:String) -> String? {
return DateFormatter(format: format).string(from: self)
}
}
Usage
var dateString = \"14.01.2017T14:54:00\"
let format = \"dd.MM.yyyy\'T\'HH:mm:ss\"
let date = Date()
print(\"original String with date: \\(dateString)\")
print(\"date String() to Date(): \\(dateString.toDate(format: format)!)\")
print(\"date String() to formated date String(): \\(dateString.toDateString(inputFormat: format, outputFormat: \"dd MMMM\")!)\")
print(\"format Date(): \\(date.toString(format: \"dd MMM HH:mm\")!)\")
Result
More information
About date format
回答6:
For Swift 3
func stringToDate(_ str: String)->Date{
let formatter = DateFormatter()
formatter.dateFormat=\"yyyy-MM-dd hh:mm:ss Z\"
return formatter.date(from: str)!
}
func dateToString(_ str: Date)->String{
var dateFormatter = DateFormatter()
dateFormatter.timeStyle=DateFormatter.Style.short
return dateFormatter.string(from: str)
}
回答7:
The code fragments on this QA page are \"upside down\"...
The first thing Apple mentions is that you cache your formatter...
Link to Apple doco stating exactly how to do this:
Cache Formatters for Efficiency Creating a date formatter is not a cheap operation. ...cache a single instance...
Use a global...
let df : DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = \"yyyy-MM-dd\"
return formatter
}()
Then simply use that formatter anywhere...
let s = df.string(from: someDate)
or
let d = df.date(from: someString)
Or use any of the other many, many convenient methods on DateFormatter.
It is that simple.
(If you write an extension on String, your code is completely \"upside down\" - you can\'t use any dateFormatter calls!)
Note that usually you will have a few of those globals .. such as \"formatForClient\" \"formatForPubNub\" \"formatForDisplayOnInvoiceScreen\" .. etc.
回答8:
Swift support extensions, with extension you can add a new functionality to an existing class
, structure
, enumeration
, or protocol
type.
You can add a new init
function to NSDate
object by extenging the object using the extension
keyword.
extension NSDate
{
convenience
init(dateString:String) {
let dateStringFormatter = NSDateFormatter()
dateStringFormatter.dateFormat = \"yyyyMMdd\"
dateStringFormatter.locale = NSLocale(localeIdentifier: \"fr_CH_POSIX\")
let d = dateStringFormatter.dateFromString(dateString)!
self.init(timeInterval:0, sinceDate:d)
}
}
Now you can init a NSDate object using:
let myDateObject = NSDate(dateString:\"2010-12-15 06:00:00\")
回答9:
Since Swift 3, many of the NS prefixes have been dropped.
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = \"yyyy-MM-dd\'T\'HH:mm:ss.SSSZ\"
/* date format string rules
* http://userguide.icu-project.org/formatparse/datetime
*/
let date = dateFormatter.date(from: dateString)
回答10:
Swift 3,4:
2 useful conversions:
string(from: Date) // to convert from Date to a String
date(from: String) // to convert from String to Date
Usage: 1.
let date = Date() //gives today\'s date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = \"dd.MM.yyyy\"
let todaysDateInUKFormat = dateFormatter.string(from: date)
2.
let someDateInString = \"23.06.2017\"
var getDateFromString = dateFormatter.date(from: someDateInString)
回答11:
FOR SWIFT 3.1
func convertDateStringToDate(longDate: String) -> String{
/* INPUT: longDate = \"2017-01-27T05:00:00.000Z\"
* OUTPUT: \"1/26/17\"
* date_format_you_want_in_string from
* http://userguide.icu-project.org/formatparse/datetime
*/
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = \"yyyy-MM-dd\'T\'HH:mm:ss.SSSZ\"
let date = dateFormatter.date(from: longDate)
if date != nil {
let formatter = DateFormatter()
formatter.dateStyle = .short
let dateShort = formatter.string(from: date!)
return dateShort
} else {
return longDate
}
}
NOTE: THIS WILL RETURN THE ORIGINAL STRING IF ERROR
回答12:
To add String within Date Format in Swift, I did this
var dataFormatter:NSDateFormatter = NSDateFormatter()
dataFormatter.dateFormat = \"dd-MMMM \'at\' HH:mm a\"
cell.timeStamplbl.text = dataFormatter.stringFromDate(object.createdAt)
回答13:
This work for me..
import Foundation
import UIKit
//dateString = \"01/07/2017\"
private func parseDate(_ dateStr: String) -> String {
let simpleDateFormat = DateFormatter()
simpleDateFormat.dateFormat = \"dd/MM/yyyy\" //format our date String
let dateFormat = DateFormatter()
dateFormat.dateFormat = \"dd \'de\' MMMM \'de\' yyyy\" //format return
let date = simpleDateFormat.date(from: dateStr)
return dateFormat.string(from: date!)
}
回答14:
Swift: iOS
if we have string, convert it to NSDate,
var dataString = profileValue[\"dob\"] as String
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = \"MM-dd-yyyy\"
// convert string into date
let dateValue:NSDate? = dateFormatter.dateFromString(dataString)
if you have and date picker parse date like this
// to avoid any nil value
if let isDate = dateValue {
self.datePicker.date = isDate
}
回答15:
Below are some string to date format converting options can be usedin swift iOS.
Thursday, Dec 27, 2018
format=EEEE, MMM d, yyyy
12/27/2018
format=MM/dd/yyyy
12-27-2018 09:59
format=MM-dd-yyyy HH:mm
Dec 27, 9:59 AM
format=MMM d, h:mm a
December 2018
format=MMMM yyyy
Dec 27, 2018
format=MMM d, yyyy
Thu, 27 Dec 2018 09:59:19 +0000
format=E, d MMM yyyy HH:mm:ss Z
2018-12-27T09:59:19+0000
format=yyyy-MM-dd\'T\'HH:mm:ssZ
27.12.18
format=dd.MM.yy
09:59:19.815
format=HH:mm:ss.SSS
回答16:
import Foundation
let now : String = \"2014-07-16 03:03:34 PDT\"
var date : NSDate
var dateFormatter : NSDateFormatter
date = dateFormatter.dateFromString(now)
date // $R6: __NSDate = 2014-07-16 03:03:34 PDT
https://developer.apple.com/library/prerelease/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/index.html#//apple_ref/doc/uid/20000447-SW32