Sebagai sumber pendamping untuk semua jawaban di bawah ini, saya akan sangat menyarankan untuk memeriksa nsdateformatter.com
user3344977
Jawaban lama di sini benar-benar SALAH . Doco Apple mengatakan sangat jelas Anda perlu melakukan cache formatter. stackoverflow.com/a/42370648/294884
Fattie
Jika Anda membutuhkan penolong apa pun dengan format ini, nsdateformatter.com
Pedro Luz
Jawaban:
341
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
*/guardlet date = dateFormatter.date(from:/* your_date_string */)else{
fatalError("ERROR: Date conversion failed due to mismatched format.")}// use date constant here
Ditemukan solusinya hanya perlu mengatur "yyyy-MM-dd hh: mm: ss.SSSSxxx" format tanggal ini
Shardul
1
Saya memiliki string tanggal seperti ini "2014-07-15 06: 55: 14-0400" dan saya mencoba menggunakan yyyy-MM-dd hh:mm:ssZZZ. Tapi saya tidak bisa mengeluarkan objek tanggal dari string.
iamprem
2
@ Prim, jika Anda melihat hasilnya adalah "2014-07-15 10:55:14 +0000"yang benar. Seperti dari NSDatedeskripsi, output tanggal akan dihitung dengan perbedaan (di sini, GMT -4 jam). Jika Anda ingin mendapatkan perbedaan antara GMT dan UTC, yang -0400memeriksa referensi
x4h1d
@ x4h1d, Hei, saya mengerti! Saya membuat kesalahan di hhmana seharusnya HH. Terima kasih!
iamprem
3
@ lmiguelvargasf, saya pikir itu akan terjadi yyyy-MM-dd'T'HH:mm:ss.SSS'Z'. Saya berasumsi Zhanya karakter di sini. Ingat, Zpunya makna khusus juga. Jika Anda ingin Zmenentukan basic hmsformatnya yyyy-MM-dd'T'HH:mm:ss.SSSZ.
x4h1d
71
Cepat 4
importFoundationlet 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
importFoundationvar dateString ="2014-07-15"// change to your date format
var dateFormatter =NSDateFormatter()
dateFormatter.dateFormat ="yyyy-MM-dd"var date = dateFormatter.dateFromString(dateString)
println(date)
Kode tidak benar. Ini menampilkan Some "15 Jan 2014, 12:00 AM"
Jake Lin
5
menggunakan ddbukannya DDseharusnya membantu memperbaiki masalah "selalu Januari".
Pascal Belloncle
1
Versi yang benar adalah, yyyy-MM-ddjika tidak, tanggal yang diuraikan macet pada bulan Januari - Saya memperbarui jawaban untuk mencerminkan perubahan.
Zorayr
Bagaimana jika saya ingin melewatkan tanggal saat ini sebagai string. Akankah ini berhasil?
Arjun Kalidas
@Zorayr, Kittisak: Saya mendapatkan put out, Opsional (2014-07-14 18:30:00 +0000) itu artinya, satu hari dikurangi. Bagaimana saya bisa memperbaikinya?
Vineesh TP
54
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")asTimeZone!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")asTimeZone!let timeStamp = dateFormatter.string(from: date!)return timeStamp
}
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:
extensionString{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:
Terima kasih. Mungkin juga, walaupun kurang bermanfaat, untuk menulis: var myDate = "04-05-2015" .toDateTime () Saya menemukan ini berguna saat mengatur data pengujian.
Stephen Watson
1
Saya cukup yakin bahwa hhseharusnya HHdalam hal ini.
Alex
Ini tidak memberi saya dalam format yang saya tentukan: var date = NSDate (); biarkan dateFormatter = NSDateFormatter (); dateFormatter.dateFormat = "MMMM d, YYYY"; biarkan myDate = dateFormatter.stringFromDate (date); Dan di atas ini jika saya menggunakan ekstensi Anda seperti ini -> var myDate2 = myDate.toDateTime (); Ini memberi saya tanggal yang sama sekali berbeda dan bukan tanggal saat 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.
Sesederhana itu.
(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.
Tidak perlu meninggalkan mereka di ruang lingkup global. Anda dapat memperpanjang Formatter hanya menyatakan properti Anda statis. periksa stackoverflow.com/a/43658213/2303865
Leo Dabus
4
Ekstensi dukungan Swift, dengan ekstensi Anda dapat menambahkan fungsi baru untuk yang sudah ada class, structure, enumeration, atau protocoljenis.
Anda dapat menambahkan initfungsi baru ke NSDateobjek dengan memeras objek menggunakan extensionkata kunci.
Saya suka cara init. Apakah tidak ada cara lain untuk membuat tanggal tanpa menggunakan timeInterval? bagaimana jika nsdate berhenti memiliki penginisialisasi dengan parameter tanggal? bagaimana Anda akan menyelesaikannya? Secara pribadi saya lebih suka cara init tapi saya tidak tahu bagaimana mengatasi masalah ini
Mijail
Saya memiliki masalah: tanggal saya sebagai string adalah seperti ini: "2017-03-10 22:16:00 +0000" dan saya menggunakan format ini: "yyyy-MM-dd jj: mm: ss Z" dan yang ini: "yyyy-MM-dd'T'HH: mm: ss". Tetapi untuk keduanya, ketika saya melakukan ini: biarkan beginDate = df.date(from: beginDateString), saya mendapat nol! Mengapa? ( df = DateFormatter())
Paul Bénéteau
4
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)
Saya memiliki masalah: tanggal saya sebagai string adalah seperti ini: "2017-03-10 22:16:00 +0000" dan saya menggunakan format ini: "yyyy-MM-dd jj: mm: ss Z" dan yang ini: "yyyy-MM-dd'T'HH: mm: ss". Tetapi untuk keduanya, ketika saya melakukan ini: biarkan beginDate = df.date(from: beginDateString), saya mendapat nol! Mengapa? ( df = DateFormatter())
Paul Bénéteau
4
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)
Swift:iOSif we have string, convert it to NSDate,var dataString = profileValue["dob"]asStringvar 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
iflet isDate = dateValue {self.datePicker.date = isDate
}
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)
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")guardlet date = dateFormatter.date(from: dateString)else{returnnil}return date
}
importFoundationlet now :String="2014-07-16 03:03:34 PDT"var date :NSDatevar dateFormatter :NSDateFormatter
date = dateFormatter.dateFromString(now)
date // $R6:__NSDate =2014-07-1603:03:34 PDT
Jawaban:
coba ini:
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)
sumber
yyyy-MM-dd hh:mm:ssZZZ
. Tapi saya tidak bisa mengeluarkan objek tanggal dari string."2014-07-15 10:55:14 +0000"
yang benar. Seperti dariNSDate
deskripsi, output tanggal akan dihitung dengan perbedaan (di sini, GMT -4 jam). Jika Anda ingin mendapatkan perbedaan antara GMT dan UTC, yang-0400
memeriksa referensihh
mana seharusnyaHH
. Terima kasih!yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
. Saya berasumsiZ
hanya karakter di sini. Ingat,Z
punya makna khusus juga. Jika Anda inginZ
menentukanbasic hms
formatnyayyyy-MM-dd'T'HH:mm:ss.SSSZ
.Cepat 4
Cepat 3
Saya bisa melakukannya dengan kode ini.
sumber
dd
bukannyaDD
seharusnya membantu memperbaiki masalah "selalu Januari".yyyy-MM-dd
jika tidak, tanggal yang diuraikan macet pada bulan Januari - Saya memperbarui jawaban untuk mencerminkan perubahan.Diperbarui untuk Swift 3.
sumber
Detail
Larutan
Pemakaian
Hasil
Informasi lebih lanjut
Tentang format tanggal
sumber
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:
Kemudian jika Anda ingin mengubah string Anda menjadi NSDate, Anda bisa menulis sesuatu seperti:
sumber
hh
seharusnyaHH
dalam hal ini.Untuk Swift 3
sumber
Fragmen kode pada halaman QA ini "terbalik" ...
Hal pertama yang Apple sebutkan adalah Anda menyimpan cache ...
Tautan ke Apple doco yang menyatakan persis bagaimana melakukan ini:
Gunakan global ...
Maka cukup gunakan formatter itu di mana saja ...
atau
Atau gunakan salah satu dari banyak, banyak metode lain yang nyaman di DateFormatter.
Sesederhana itu.
(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.
sumber
Ekstensi dukungan Swift, dengan ekstensi Anda dapat menambahkan fungsi baru untuk yang sudah ada
class
,structure
,enumeration
, atauprotocol
jenis.Anda dapat menambahkan
init
fungsi baru keNSDate
objek dengan memeras objek menggunakanextension
kata kunci.Sekarang Anda bisa init objek NSDate menggunakan:
sumber
df.date(from: beginDateString)
, saya mendapat nol! Mengapa? (df = DateFormatter()
)Sejak Swift 3, banyak awalan NS telah dijatuhkan.
sumber
df.date(from: beginDateString)
, saya mendapat nol! Mengapa? (df = DateFormatter()
)Cepat 3,4:
2 konversi yang bermanfaat:
Penggunaan: 1.
2.
sumber
UNTUK SWIFT 3.1
CATATAN: INI AKAN KEMBALI STRING ASLI JIKA KESALAHAN
sumber
Untuk menambahkan String dalam Format Tanggal dalam Swift, saya melakukan ini
sumber
Ini bekerja untuk saya ..
sumber
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
sumber
sumber
Anda dapat mencoba kode cepat ini
sumber
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 .
sumber
https://developer.apple.com/library/prerelease/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/index.html#//apple_ref/doc/uid/20000447-SW32
sumber