Dans les images ci-dessous, vous pouvez voir le code que j'ai écrit et les valeurs de toutes les variables:
class fun getCurrentShortDate() -> String {
var todaysDate = NSDate()
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
var DateInFormat = dateFormatter.stringFromDate(todaysDate)
return DateInFormat
}
Comme vous pouvez le constater, la date actuelle ne pose aucun problème, mais lorsque je tente de remplacer le NSDate par une chaîne, il ne le fait tout simplement pas.
Xcode 8 ou version ultérieure • Swift 3 ou version ultérieure
extension Date {
func localizedDescription(dateStyle: DateFormatter.Style = .medium,
timeStyle: DateFormatter.Style = .medium,
in timeZone : TimeZone = .current,
locale : Locale = .current) -> String {
Formatter.date.locale = locale
Formatter.date.timeZone = timeZone
Formatter.date.dateStyle = dateStyle
Formatter.date.timeStyle = timeStyle
return Formatter.date.string(from: self)
}
var localizedDescription: String { return localizedDescription() }
}
extension TimeZone {
static let gmt = TimeZone(secondsFromGMT: 0)!
}
extension Formatter {
static let date = DateFormatter()
}
Date().localizedDescription // "Sep 26, 2018 at 12:03:41 PM"
Date().localizedDescription(in: .gmt) // "Sep 26, 2018 at 3:03:41 PM" UTC TIME
Date().localizedDescription(dateStyle: .short, timeStyle: .short) // "9/26/18, 12:03 PM"
Date().localizedDescription(dateStyle: .full, timeStyle: .full) // "Wednesday, September 26, 2018 at 12:03:41 PM Brasilia Standard Time"
Date().localizedDescription(dateStyle: .full, timeStyle: .full, in: .gmt) // "Wednesday, September 26, 2018 at 3:03:41 PM Greenwich Mean Time"
extension Date {
var fullDate: String { return localizedDescription(dateStyle: .full, timeStyle: .none) }
var shortDate: String { return localizedDescription(dateStyle: .short, timeStyle: .none) }
var fullTime: String { return localizedDescription(dateStyle: .none, timeStyle: .full) }
var shortTime: String { return localizedDescription(dateStyle: .none, timeStyle: .short) }
var fullDateTime: String { return localizedDescription(dateStyle: .full, timeStyle: .full) }
var shortDateTime: String { return localizedDescription(dateStyle: .short, timeStyle: .short) }
}
print(Date().fullDate) // "Friday, May 26, 2017\n"
print(Date().shortDate) // "5/26/17\n"
print(Date().fullTime) // "10:16:24 AM Brasilia Standard Time\n"
print(Date().shortTime) // "10:16 AM\n"
print(Date().fullDateTime) // "Friday, May 26, 2017 at 10:16:24 AM Brasilia Standard Time\n"
print(Date().shortDateTime) // "5/26/17, 10:16 AM\n"
Vous pouvez créer une extension pour transformer facilement une String
en une NSDate
.
extension NSDate {
func dateFromString(date: String, format: String) -> NSDate {
let formatter = NSDateFormatter()
let locale = NSLocale(localeIdentifier: "en_US_POSIX")
formatter.locale = locale
formatter.dateFormat = format
return formatter.dateFromString(date)!
}
}
Dans votre fonction, vous pouvez NSDate().dateFromString("2015-02-04 23:29:28", format: "yyyy-MM-dd HH:mm:ss")
et cela devrait fonctionner. La date d'entrée n'a pas besoin d'être au même format que la date de sortie.
func getCurrentShortDate() -> String {
var todaysDate = NSDate().dateFromString("2015-02-04 23:29:28", format: "yyyy-MM-dd HH:mm:ss")
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
var DateInFormat = dateFormatter.stringFromDate(todaysDate)
return DateInFormat
}
println(getCurrentShortDate())
La sortie est 04-02-2015
.
Mise à jour pour Swift 3.0: Créez une extension pour Date
extension Date {
func string(format: String) -> String {
let formatter = DateFormatter()
formatter.dateFormat = format
return formatter.string(from: self)
}
}
Usage:
Date().string(format: "yyyy-MM-dd")
Swift 2.2: Créez une extension pour NSDate
extension NSDate {
func dateStringWithFormat(format: String) -> String {
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = format
return dateFormatter.stringFromDate(self)
}
}
Usage:
NSDate().dateStringWithFormat("yyyy-MM-dd")
Swift 3
En utilisant l'extension créée par @doovers et certaines chaînes de format de ce site website , vous obtenez les éléments suivants:
extension Date {
func string(format: String) -> String {
let formatter = DateFormatter()
formatter.dateFormat = format
return formatter.string(from: self)
}
}
Utilisation:
Date().string(format: "EEEE, MMM d, yyyy") // Saturday, Oct 21, 2017
Date().string(format: "MM/dd/yyyy") // 10/21/2017
Date().string(format: "MM-dd-yyyy HH:mm") // 10-21-2017 03:31
Date().string(format: "MMM d, h:mm a") // Oct 21, 3:31 AM
Date().string(format: "MMMM yyyy") // October 2017
Date().string(format: "MMM d, yyyy") // Oct 21, 2017
Date().string(format: "E, d MMM yyyy HH:mm:ss Z") // Sat, 21 Oct 2017 03:31:40 +0000
Date().string(format: "yyyy-MM-dd'T'HH:mm:ssZ") // 2017-10-21T03:31:40+0000
Date().string(format: "dd.MM.yy") // 21.10.17
Vous pouvez également passer un objet millisecondes à date comme ceci:
Date(1508577868947).string(format: "EEEE, MMM d, yyyy") // Saturday, Oct 21, 2017
Voici comment Apple suggère
let formatter = DateFormatter()
formatter.locale = Locale.current
formatter.dateStyle = .short
let dateString = formatter.string(from: date)
ou si le format prédéfini de .short, .medium, .long et .full ont parfaitement raison, créez le modèle dans une langue
let formatter = DateFormatter()
formatter.locale = Locale.current
formatter.setLocalizedDateFormatFromTemplate("MM/dd/yyyy")
let dateString = formatter.string(from: date)
let dateformatter1 = DateFormatter () dateformatter1.dateFormat = "ccc, d MMM aaaa"
let dateString1 = dateformatter1.string(from: datePicker.date)
print("Date Selected \(dateString1)")
labelDate.text = dateString1
let dateformatter2 = DateFormatter()
dateformatter2.dateFormat = "dd-MM-yyyy"
let dateString2 = dateformatter2.string(from: datePicker.date)
print("Date Selected \(dateString2)")
let dateformatter3 = DateFormatter()
dateformatter3.dateFormat = "dd/MM/yyyy"
let dateString3 = dateformatter3.string(from: datePicker.date)
print("Date Selected \(dateString3)")
let dateformatter4 = DateFormatter()
dateformatter4.dateFormat = "dd MMMM yyyy hh:mm a"
let dateString4 = dateformatter4.string(from: datePicker.date)
print("Date Selected \(dateString4)")
J'ai référé cet article sur Codzify.com . Très utile.