İPhone'da tarih dizelerinde milisaniyeler için hangi biçim dizesini kullanırım?


100

Dizeleri milisaniye içeren bir biçimde ayrıştırmam gerekiyor. Doğru tarih değerini elde etmek için hangi biçim dizesini kullanırım?

Örneğin, şu değere sahip bir dizem olduğunu varsayalım: "2011-06-23T13: 13: 00.000"

Aşağıdaki kodda NSDateFormatter'ıma hangi biçim dizesini iletmeliyim?

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];

??? yerine ne kullanırım? yukarıdaki kodda?

Yanıtlar:


211

Bu var SSSbaşına, Unicode Yerel Veri İşaretleme Dili spec .

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

Daha genel olarak, saniyenin kesirleri bileşeninde bu kadar çok ondalık basamak elde etmek için herhangi bir sayıda büyük S karakteri kullanın. ( ss.SÖrneğin, saniyenin en yakın onda birine kadar olan zamanı gösterecektir.)


2
Milisaniyeleri nasıl yumuşak bir şekilde ayrıştırabileceğimi bilip bilmediğini merak ediyordum. Tarih 6, 7 veya hatta milisaniye olmayabilir. Normal ifadelerle gidebilirdim ama bunun uygun bir format dizesi ile kutunun dışında yapılıp yapılamayacağını merak ediyordum.
Cyupa

Bu şekilde maksimum S sayısı üçtür, örneğin SSS. Daha fazlasını eklerseniz, örneğin 1415986217.544384 ve .SSSSSS'nin timeIntervalSince1970'i için sıfırlar elde edersiniz, bu yüzden harika bir çözüm değil.
malhal

@Cyupa Bir milisaniye, saniyenin yalnızca 1 / 1000'i kadardır. 6 ondalık hane mikrosaniyedir ve 1 ondalık hane onlu saniyedir. - Herhangi bir ondalık sayı için milisaniye kullanmak mecazi olarak bir şey için kelimenin tam anlamıyla kullanmak kadar yanlıştır; yine de yapabilirsiniz, ancak bu kelimenin anlamını değiştirir.
Liggliluff


4

Sonunda aynı sayıda 'S' geçmeniz gerekir , örneğin Tarihim '2015-11-17T03: 36: 45.041503Z' idi ve 'yyyy-MM-gd'T'HH: mm: ss.SSSSSz' kullandım formatlayıcı, demek istediğim 'S' sayısının 6 basamaklı olarak 6 olduğunu tarih geliyor.


Milisaniye yerine mikrosaniye cinsinden nanosaniye elde etmek için biçimlendirilen şey. 'Yyyy-MM-gg'T'HH: mm: ss.SSSSSz' ve 'yyyy-MM-gd'T'H: mm: ss.SSSSSSSz' ile denedim ve çalışmıyor.
IndexOutOfDevelopersException

-1

SSSsaniyenin üç ondalık basamağı için kullanın

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

Bu başarısız olur. Geri randevum yok.
34'te
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.