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 NSDate
Beschreibung 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
hh
dem es sein sollte HH
. Vielen Dank!
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
. Ich nahm an, dass Z
es hier nur ein Charakter ist. Denken Sie daran, Z
hat auch eine besondere Bedeutung. Wenn Sie Z
angeben möchten , wie basic hms
das 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.
dd
anstelle von DD
sollte helfen, das Problem "immer Januar" zu beheben.
yyyy-MM-dd
andernfalls 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()
hh
sollte HH
in 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 protocol
Typ.
Sie können dem Objekt eine neue init
Funktion hinzufügen , NSDate
indem Sie das Objekt mit dem extension
Schlü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, 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
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
}
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