Ich möchte "2014-07-15 06: 55: 14.198000 + 00: 00" dieses Zeichenfolgendatum in NSDate in Swift konvertieren.
Ich möchte "2014-07-15 06: 55: 14.198000 + 00: 00" dieses Zeichenfolgendatum in NSDate in Swift konvertieren.
Antworten:
Versuche dies:
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 */)
Überprüfen Sie für weitere Abfragen die NSDateFormatter- und DateFormatter- Klassen des Foundation- Frameworks für Objective-C bzw. Swift.
Swift 3 und höher (Swift 4 enthalten)
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
yyyy-MM-dd hh:mm:ssZZZ. Aber ich kann das Datumsobjekt nicht aus der Zeichenfolge herausholen.
"2014-07-15 10:55:14 +0000"korrekt ist. Wie aus der NSDateBeschreibung hervorgeht, würde die Ausgabe des Datums mit Differenz berechnet (hier GMT -4 Stunden). Wenn Sie den Unterschied zwischen GMT und UTC erhalten möchten, -0400überprüfen Sie diese Referenz
hhdem es sein sollte HH. Vielen Dank!
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'. Ich nahm an, dass Zes hier nur ein Charakter ist. Denken Sie daran, Zhat auch eine besondere Bedeutung. Wenn Sie Zangeben möchten , wie basic hmsdas Format wäre yyyy-MM-dd'T'HH:mm:ss.SSSZ.
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)
Ich kann es mit diesem Code machen.
ddanstelle von DDsollte helfen, das Problem "immer Januar" zu beheben.
yyyy-MM-ddandernfalls bleibt das analysierte Datum im Januar hängen - ich habe die Antwort aktualisiert, um die Änderung widerzuspiegeln.
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
}
Aktualisiert für 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
}
import Foundation
extension DateFormatter {
convenience init (format: String) {
self.init()
dateFormat = format
locale = Locale.current
}
}
extension String {
func toDate (dateFormatter: DateFormatter) -> Date? {
return dateFormatter.date(from: self)
}
func toDateString (dateFormatter: DateFormatter, outputFormat: String) -> String? {
guard let date = toDate(dateFormatter: dateFormatter) else { return nil }
return DateFormatter(format: outputFormat).string(from: date)
}
}
extension Date {
func toString (dateFormatter: DateFormatter) -> String? {
return dateFormatter.string(from: self)
}
}
var dateString = "14.01.2017T14:54:00"
let dateFormatter = DateFormatter(format: "dd.MM.yyyy'T'HH:mm:ss")
let date = Date()
print("original String with date: \(dateString)")
print("date String() to Date(): \(dateString.toDate(dateFormatter: dateFormatter)!)")
print("date String() to formated date String(): \(dateString.toDateString(dateFormatter: dateFormatter, outputFormat: "dd MMMM")!)")
let dateFormatter2 = DateFormatter(format: "dd MMM HH:mm")
print("format Date(): \(date.toString(dateFormatter: dateFormatter2)!)")
Wenn Sie die Zeichenfolge häufig in ein Datum analysieren müssen, möchten Sie die Funktionalität möglicherweise in eine Erweiterung verschieben. Ich habe eine sharedCode.swift-Datei erstellt und meine Erweiterungen dort abgelegt:
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
}
}
Wenn Sie dann Ihren String in ein NSDate konvertieren möchten, können Sie einfach Folgendes schreiben:
var myDate = myDateString.toDateTime()
hhsollte HHin diesem Fall.
Für 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)
}
Das erste, was Apple erwähnt, ist, dass Sie Ihren Formatierer zwischenspeichern ...
Link zu Apple Doco, in dem genau angegeben ist, wie das geht:
Cache-Formatierer für mehr Effizienz Das Erstellen eines Datumsformatierers ist kein billiger Vorgang. ... eine einzelne Instanz zwischenspeichern ...
Verwenden Sie eine globale ...
let df : DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
Dann verwenden Sie diesen Formatierer einfach überall ...
let s = df.string(from: someDate)
oder
let d = df.date(from: someString)
Oder verwenden Sie eine der vielen anderen praktischen Methoden für DateFormatter.
(Wenn Sie eine Erweiterung für String schreiben, ist Ihr Code vollständig "verkehrt herum" - Sie können keine dateFormatter-Aufrufe verwenden!)
Beachten Sie, dass Sie normalerweise einige dieser globalen Elemente haben, z. B. "formatForClient" "formatForPubNub" "formatForDisplayOnInvoiceScreen" usw.
Swift Verlängerungen, mit der Erweiterung können Sie eine neue Funktionalität zu einem bestehenden hinzufügen class, structure, enumeration, oder protocolTyp.
Sie können dem Objekt eine neue initFunktion hinzufügen , NSDateindem Sie das Objekt mit dem extensionSchlüsselwort erweitern.
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)
}
}
Jetzt können Sie ein NSDate-Objekt mit folgenden Elementen initiieren:
let myDateObject = NSDate(dateString:"2010-12-15 06:00:00")
df.date(from: beginDateString), ich bekomme eine Null! Warum? ( df = DateFormatter())
Seit Swift 3 wurden viele der NS-Präfixe gelöscht.
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)
df.date(from: beginDateString), ich bekomme eine Null! Warum? ( df = DateFormatter())
Swift 3,4:
2 nützliche Konvertierungen:
string(from: Date) // to convert from Date to a String
date(from: String) // to convert from String to Date
Verwendungszweck 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)
FÜR 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
}
}
HINWEIS: Dadurch wird die ursprüngliche Zeichenfolge bei einem Fehler zurückgegeben
Diese Arbeit für mich ..
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!)
}
Im Folgenden finden Sie einige Konvertierungsoptionen für Zeichenfolgen in Datumsformate, die in schnellem iOS verwendet werden können.
Thursday, Dec 27, 2018 format = EEEE, MMM d, yyyy12/27/2018 format = MM/dd/yyyy12-27-2018 09:59 format = MM-dd-yyyy HH:mmDec 27, 9:59 AM format = MMM d, h:mm aDecember 2018 format = MMMM yyyyDec 27, 2018 format = MMM d, yyyyThu, 27 Dec 2018 09:59:19 +0000 format = E, d MMM yyyy HH:mm:ss Z2018-12-27T09:59:19+0000 format = yyyy-MM-dd'T'HH:mm:ssZ27.12.18 format = dd.MM.yy09:59:19.815 format = HH:mm:ss.SSSSwift: 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
}
Sie können diesen schnellen Code ausprobieren
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 5 , Xcode 11.0
Übergeben Sie Ihr (Datum in Zeichenfolge) im gewünschten Datumsformat "dateString" und "dateFormat". Verwenden Sie zur Auswahl des Formats die NDateFormatter-Website .
func getDateFrom(dateString: String, dateFormat: String) -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
dateFormatter.locale = Locale(identifier: "en_US")
guard let date = dateFormatter.date(from: dateString) else {return nil}
return date
}
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