Je veux convertir "2014-07-15 06: 55: 14.198000 + 00: 00" cette date de chaîne en NSDate dans Swift.
essaye ça:
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 */)
Pour une requête ultérieure, vérifiez NSDateFormatter et DateFormatter classes de Foundation framework pour Objective-C et Swift, respectivement.
Swift 3 et versions ultérieures (Swift 4 inclus)
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
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)
Je peux le faire avec ce code.
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
}
Mis à jour pour 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
}
Si vous devez analyser souvent la chaîne dans une date, vous pouvez déplacer la fonctionnalité dans une extension. J'ai créé un fichier sharedCode.Swift et y ai mis mes extensions:
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
}
}
Ensuite, si vous voulez convertir votre chaîne en NSDate, vous pouvez écrire quelque chose comme:
var myDate = myDateString.toDateTime()
Swift 4, xCode 9.2/Swift 3, xCode 8.2.1
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)
}
}
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")!)")
Pour 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)
}
La première chose que Apple mentionne est que vous cachez votre formateur ...
Lien vers le doco Apple indiquant exactement comment procéder:
Cache Formatters for Efficiency Créer un formateur de date n’est pas une opération peu coûteuse. ... cache une seule instance ...
Utilisez un global ...
let df : DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
Alors utilisez simplement ce formateur n'importe où ...
let s = df.string(from: someDate)
ou
let d = df.date(from: someString)
Ou utilisez l’une des nombreuses autres méthodes pratiques sur DateFormatter.
(Si vous écrivez une extension sur String, votre code est complètement "à l'envers" - vous ne pouvez utiliser aucun appel dateFormatter!)
Notez que vous aurez généralement quelques uns de ces globals .. tels que "formatForClient" "formatForPubNub" "formatForDisplayOnInvoiceScreen" .. etc.
Les extensions d'assistance Swift, avec extension, vous permettent d'ajouter une nouvelle fonctionnalité à un type class
, structure
, enumeration
ou protocol
existant.
Vous pouvez ajouter une nouvelle fonction init
à l'objet NSDate
en l'étendant à l'aide du mot clé extension
.
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)
}
}
Vous pouvez maintenant initier un objet NSDate en utilisant:
let myDateObject = NSDate(dateString:"2010-12-15 06:00:00")
Swift 3,4:
2 conversions utiles:
string(from: Date) // to convert from Date to a String
date(from: String) // to convert from String to Date
Utilisation: 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)
Depuis Swift 3, de nombreux préfixes NS ont été supprimés.
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)
POUR 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: CECI RENVOIT LA CHAÎNE ORIGINALE SI UNE ERREUR
Pour ajouter une chaîne dans le format de date dans Swift, je l'ai fait.
var dataFormatter:NSDateFormatter = NSDateFormatter()
dataFormatter.dateFormat = "dd-MMMM 'at' HH:mm a"
cell.timeStamplbl.text = dataFormatter.stringFromDate(object.createdAt)
Ce travail pour moi ..
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!)
}
Vous pouvez essayer ce code Swift
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"//same as strDate date formator
dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00")//Must used if you get one day less in conversion
let convertedDateObject = dateFormatter.date(from: strDate)
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
}
Vous trouverez ci-dessous des options de conversion de format de chaîne en date pouvant être utilisées dans 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