2010-01-09 18 views
20

kullanarak farklı tarih saat biçimleri nasıl kullanılır? Datetime biçimine sahip bir Dize var: "YYYY-AA-DD HH: MM: SS".NSDateFormatter

benim kaynak kodunda bu kullanın:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"%e. %B %Y"]; 
NSString *test = [formatter stringFromDate:@"2010-01-10 13:55:15"]; 

ben "2010-01-10 13:55:15" "10. Ocak 2010" den dönüştürmek istiyorum. Ancak benim uygulamam çalışmıyor.

Burada sorun ne var?

Çok teşekkürler & Saygılarımızla.

Güncelleme kaynak kodu:

Bir NSDate örneğine dize tabanlı tarihi dönüştürmek için [NSFormatter dateFromString:] kullanmak istiyorum
[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; 
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"%Y-%m-%d %H:%M:%S"]; 
NSString *test1 = [formatter stringFromDate:@"2010-01-10 13:55:15"]; 

NSDateFormatter *formatter1 = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter1 setDateFormat:@"%d. %M4 %Y"]; 
NSString *test2 = [formatter1 stringFromDate:test1]; 
+0

pueden ayudarme con estan pregunta http olacaktır.com/questions/15162835/how-to-use-nsdateformatter-to-venezuela gracias – tony

cevap

32

Bir tarih biçimlendirici bir seferde yalnızca tek bir biçimi işleyebilir. Bu yaklaşım gerekir: // stackoverflow:

NSDateFormatter *f = [[NSDateFormatter alloc] init]; 
[f setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *date = [f dateFromString:@"2010-01-10 13:55:15"]; 

NSDateFormatter *f2 = [[NSDateFormatter alloc] init]; 
[f2 setDateFormat:@"d. MMMM YYYY"]; 
NSString *s = [f2 stringFromDate:date]; 

ler artık "10. Ocak 2010"

+3

, biçimlendiricileri yayınlamayı unutmayın – user102008

1

. Buradan stringFromDate'u NSDate ile kullanmak istediğiniz, yukarıda yazdığınız gibi değil. Ayrıştırma ve biçimlendirme için aynı NSDateFormatter'ı kullandığınızdan emin değilim - farklı biçim stillerini işlemek için iki ayrı örneğe ihtiyacınız olabilir.

+0

NSDateFormatter mı demek istediniz? Bence bu yöntemler sadece Mac OS X'te mevcut değil. Ayrıca Mac OS X referans kitaplığına da bağlanıyorsunuz. – Tim

+0

Referans verdiğim rutinler iPhone için de mevcut. Cevabını hep aynı bulmana sevindim. – fbrereto

2

Her şeyden önce, davranışı 10.4'e ayarladığınızdan emin olun - daha modern, deneyimlerimde daha iyi çalışır.

[dateTimeFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 

Ardından, onlar 2 farklı dize temsilleri varsa ayrıştırmak ve format aynı biçimi kullanın, bu yüzden 2 biçemleyicileri kullanın veya ayrıştırma ve daha sonra biçimlendirme arasındaki dize biçimini değiştiremez.

Ayrıca biçimlendirme seçenekleri dikkate emin olun:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1

küçük harf e haftanın günü, küçük d ayın günüdür olmasıdır.

ay boyunca

, benim kodundan veri biçemleyicilerle çalışan birkaç örnek Burada AAAA değil B.

+0

Hm, sanırım "sistemi" anlamadım. İlk gönderimi güncelledim. Bunun neden işe yaramadığını bilmiyorum. – Tim

+0

Yazım hatası yaşadım - M4 tarafından, MMMM'de olduğu gibi 4 Ms demek istedim. –

+1

setFormatterBehavior: iPhone işletim sisteminde gerekli değildir, * sadece * 10.4+ modunda çalışır. – benzado

6

kullanmak vardır. Bu işlevlerden herhangi birini alabilmeniz ve formatınız için ayarlayabilmeniz gerekir.

KULLANIMI

NSDate *today = [NSDate date]; 
NSDateFormatter *dateFormatter = [Constants getTitleDateFormatter]; 
NSString *dateString = [dateFormatter stringFromDate:today];   
[dateFormatter release]; 

FONKSİYONLAR

+ (NSDateFormatter *) getDateFormatterWithTimeZone { 
    //Returns the following information in the format of the locale: 
    //YYYY-MM-dd HH:mm:ss z (Z is time zone) 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setLocale:[NSLocale currentLocale]]; 
    [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterLongStyle]; 
    return dateFormatter; 

}

+ (NSDateFormatter *)dateFormatterWithoutYear { 
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    NSString *format = [dateFormatter dateFormat]; 
    format = [format stringByReplacingOccurrencesOfString:@"/yy" withString:@""]; 
    NSRange secondSpace; 
    secondSpace.location = format.length-2; 
    secondSpace.length = 1; 
    format = [format stringByReplacingCharactersInRange:secondSpace withString:@""]; 
    [dateFormatter setDateFormat:format]; 
    return dateFormatter; 
} 

+ (NSDateFormatter *) dateFormatterMonthDayOnly { 
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    NSString *format = [dateFormatter dateFormat]; 
    format = [format stringByReplacingOccurrencesOfString:@"/yy" withString:@""]; 
    NSRange range; 
    range.location = 0; 
    range.length = 3; 
    format = [format substringWithRange:range]; 
    [dateFormatter setDateFormat:format]; 
    return dateFormatter; 
} 

+ (NSDateFormatter *) getTitleDateFormatter { 
    //Returns the following information in the format of the locale: 
    //MM-dd-yyyy hh:mm:ssa 
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone]; 
    [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 
    NSString *format = [dateFormatter dateFormat]; 
    NSRange secondSpace; 
    secondSpace.location = format.length-2; 
    secondSpace.length = 1; 
    format = [format stringByReplacingOccurrencesOfString:@"/" withString:@"-"]; 
    format = [format stringByReplacingCharactersInRange:secondSpace withString:@""]; 
    [dateFormatter setDateFormat:format]; 
    return dateFormatter; 
} 
İlgili konular