Format string apa yang saya gunakan selama milidetik dalam string tanggal di iPhone?

100

Saya diminta untuk mengurai string dalam format yang menyertakan milidetik. Apa format string yang saya gunakan untuk mendapatkan nilai tanggal yang benar?

Misalnya, saya memiliki string dengan nilai berikut: "2011-06-23T13: 13: 00.000"

Apa format string yang saya berikan ke NSDateFormatter saya di kode berikut?

NSString *dateValue = @"2011-06-23T13:13:00.000";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSString *formatString = @"yyyy-MM-dd'T'HH:mm:ss.???";
[formatter setDateFormat:formatString];
NSDate *date = [formatter dateFromString:dateValue];

Apa yang saya gunakan sebagai pengganti ??? pada kode di atas?

ageektrapped
sumber

Jawaban:

211

Ini SSS, sesuai spesifikasi Unicode Locale Data Markup Language .

"yyyy-MM-dd'T'HH:mm:ss.SSS"

Secara lebih umum, gunakan sejumlah karakter S huruf besar untuk mendapatkan banyak tempat desimal dalam komponen pecahan sekon. (Jadi ss.Sakan menunjukkan waktu hingga sepersepuluh detik terdekat, misalnya.)

Simon Whitaker
sumber
2
Saya ingin tahu apakah Anda tahu bagaimana saya bisa membuat penguraian milidetik yang lunak? Tanggalnya mungkin 6, 7 atau bahkan tidak ada milidetik. Saya bisa menggunakan ekspresi reguler tetapi saya bertanya-tanya apakah ini bisa dilakukan di luar kotak dengan format string yang tepat.
Cyupa
Dengan cara ini jumlah maksimum S adalah tiga, misalnya SSS. Jika Anda menambahkan lebih banyak Anda hanya mendapatkan nol misalnya untuk timeIntervalSince1970 dari 1415986217.544384 dan .SSSSSS Anda mendapatkan 0,544000 jadi bukan solusi yang bagus.
malhal
@Cyupa Milidetik hanya 1/1000 detik. 6 tempat desimal adalah mikrodetik, dan 1 tempat desimal adalah desisekon. - Menggunakan milidetik untuk sejumlah desimal sama salahnya dengan menggunakan secara harfiah untuk sesuatu secara kiasan; Anda masih bisa melakukannya, tetapi itu mengubah arti kata.
Liggliluff
7

The Format Tanggal Pola panduan menunjukkan bahwa "S" adalah format specifier untuk sepersekian detik.

Caleb
sumber
4

Anda harus memasukkan angka 'S' yang sama di bagian akhir misalnya Tanggal Saya adalah '2015-11-17T03: 36: 45.041503Z' saya menggunakan 'yyyy-MM-dd'T'HH: mm: ss.SSSSSSz' formatter, maksud saya melihat jumlah 'S' adalah 6 sebagai 6 digit tanggal masuk.

Prakash Raj
sumber
Apa yang akan diformat untuk mendapatkan nanodetik dalam mikrodetik, bukan milidetik. Saya telah mencoba dengan 'yyyy-MM-dd'T'HH: mm: ss.SSSSSSz' dan 'yyyy-MM-dd'T'HH: mm: ss.SSSSSSSSSz' dan tidak berhasil.
IndexOutOfDevelopersException
-1

gunakan SSSuntuk tiga tempat desimal sedetik

"yyyy-MM-dd'T'HH:mm:ss.SSS"
harryovers
sumber
Itu gagal. Saya tidak mendapatkan tanggal kembali.
ageektrapped