Saya ingin mengonversi "2014-07-15 06: 55: 14.198000 + 00: 00" tanggal string ini ke NSDate di Swift.
Saya ingin mengonversi "2014-07-15 06: 55: 14.198000 + 00: 00" tanggal string ini ke NSDate di Swift.
Jawaban:
coba ini:
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 */)
Untuk kueri lebih lanjut, periksa NSDateFormatter dan DateFormatter kelas kerangka kerja Foundation untuk Objective-C dan Swift, masing-masing.
Swift 3 dan yang lebih baru (Swift 4 termasuk)
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
. Tapi saya tidak bisa mengeluarkan objek tanggal dari string.
hh
mana seharusnya HH
. Terima kasih!
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
. Saya berasumsi Z
hanya karakter di sini. Ingat, Z
punya makna khusus juga. Jika Anda ingin Z
menentukan basic hms
formatnya yyyy-MM-dd'T'HH:mm:ss.SSSZ
.
Cepat 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)
Cepat 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)
Saya bisa melakukannya dengan kode ini.
dd
bukannya DD
seharusnya membantu memperbaiki masalah "selalu Januari".
yyyy-MM-dd
jika tidak, tanggal yang diuraikan macet pada bulan Januari - Saya memperbarui jawaban untuk mencerminkan perubahan.
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
}
Diperbarui untuk 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)!)")
Jika Anda perlu sering menguraikan string ke dalam tanggal, Anda mungkin ingin memindahkan fungsionalitas ke ekstensi. Saya membuat file sharedCode.swift dan meletakkan ekstensi saya di sana:
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
}
}
Kemudian jika Anda ingin mengubah string Anda menjadi NSDate, Anda bisa menulis sesuatu seperti:
var myDate = myDateString.toDateTime()
hh
seharusnya HH
dalam hal ini.
Untuk 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)
}
Hal pertama yang Apple sebutkan adalah Anda menyimpan cache ...
Tautan ke Apple doco yang menyatakan persis bagaimana melakukan ini:
Cache Formatters for Efficiency Membuat formatter tanggal bukanlah operasi yang murah. ... cache satu contoh ...
Gunakan global ...
let df : DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
Maka cukup gunakan formatter itu di mana saja ...
let s = df.string(from: someDate)
atau
let d = df.date(from: someString)
Atau gunakan salah satu dari banyak, banyak metode lain yang nyaman di DateFormatter.
(Jika Anda menulis ekstensi pada String, kode Anda benar-benar "terbalik" - Anda tidak dapat menggunakan panggilan dateFormatter!)
Perhatikan bahwa biasanya Anda akan memiliki beberapa global tersebut .. seperti "formatForClient" "formatForPubNub" "formatForDisplayOnInvoiceScreen" .. dll.
Ekstensi dukungan Swift, dengan ekstensi Anda dapat menambahkan fungsi baru untuk yang sudah ada class
, structure
, enumeration
, atau protocol
jenis.
Anda dapat menambahkan init
fungsi baru ke NSDate
objek dengan memeras objek menggunakan extension
kata kunci.
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)
}
}
Sekarang Anda bisa init objek NSDate menggunakan:
let myDateObject = NSDate(dateString:"2010-12-15 06:00:00")
df.date(from: beginDateString)
, saya mendapat nol! Mengapa? ( df = DateFormatter()
)
Sejak Swift 3, banyak awalan NS telah dijatuhkan.
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)
, saya mendapat nol! Mengapa? ( df = DateFormatter()
)
Cepat 3,4:
2 konversi yang bermanfaat:
string(from: Date) // to convert from Date to a String
date(from: String) // to convert from String to Date
Penggunaan: 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)
UNTUK 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
}
}
CATATAN: INI AKAN KEMBALI STRING ASLI JIKA KESALAHAN
Ini bekerja untuk saya ..
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!)
}
Berikut adalah beberapa opsi konversi format string to date yang dapat digunakan di iOS cepat.
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
}
Anda dapat mencoba kode cepat ini
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
Masukkan (date in string) Anda dalam "dateString" dan dalam format pass "dateFormat" yang Anda inginkan. Untuk memilih format, gunakan situs web NDateFormatter .
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