2009-05-10 18 views
5

Eminim ki bir şeyleri kaçırıyorum. Ama ben NSDateFormatterShortStyle tarzı bir NSDate görüntülerken 4 basamaklı bir yıl göstermeyi nasıl bulmaya çalışıyorum günlerce bunu googled. Bir çözümünüz varsa lütfen bana bildirin. İşte şimdi kullanıyorum kod.4 basamaklı yıllarla birlikte iphone kısa adı

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; 
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease ]; 
    [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 

    // add label for birth 
    UILabel *birthday = [[UILabel alloc] initWithFrame:CGRectMake(125, 10, 100, 25)]; 
    birthday.textAlignment = UITextAlignmentRight; 
    birthday.tag = kLabelTag; 
    birthday.font = [UIFont boldSystemFontOfSize:14]; 
    birthday.textColor = [UIColor grayColor]; 
    birthday.text = [dateFormatter stringFromDate:p.Birth]; 

cevap

10

Dört basamaklı bir süreye ihtiyacınız varsa, tam olarak istediğiniz biçimi kullanarak dateformat:'u ayarlayın. Dezavantajı otomatik yerel formatlamayı kaybedersiniz. Yerelleştirme gerekiyorsa, kısa stildeki tarih biçimini değiştirmeyi deneyebilirsiniz.

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease ]; 
[dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 

if ([[dateFormatter dateFormat] rangeOfString:@"yyyy"].location == NSNotFound) { 
    NSString *fourDigitYearFormat = [[dateFormatter dateFormat] stringByReplacingOccurrencesOfString:@"yy" withString:@"yyyy"]; 
    [dateFormatter setDateFormat:fourDigitYearFormat];    
} 

Max Macleod gelen Bugfix ile güncellendi Ben yerelleştirilmiş bir tarih biçiminde bir 2 basamaklı yılı böyle bir şey gerekli çünkü ben' yaptı ve bu gibi biri buraya sendeler o olur ne olmaz

+0

Teşekkürler ama yerelleştirmek için yerelleştirilmiş – Dave

+0

ihtiyacım var, hat dateFormatter.locale = [NSLocale autoupdatingCurrentLocale]; –

+0

aslında, yerel ayara özgü biçimin zaten yyyy olması durumunda bir denetime de ihtiyacınız olacaktır. if ([formatString rangeOfString: @ "yyyy"]. location == NSNotFound) { NSString * fourDigitYearFormat = [[dateFormatter dateFormat] stringByReplacingOccurrencesOfString: @ "yy" withString: @ "yyyy"]; [dateFormatter setDateFormat: fourDigitYearFormat]; } –

0

kCFDateFormatterShortStyle böyle “11/23/37” veya “3:30” olarak, sadece tipik sayısal, kısa stilini belirtir.

Mac OS X v10.3 ve sonraki sürümlerinde bulunur. CFDateFormatter.h'de bildirilen

.

Source

NSDateFormatterShortStyle size 4 basamaklı yılları vermek görünmüyor.

+3

bu tür: Reklam, ama Dave istediğini ve yapamadı ve nerede doğru verilen cevapların hiçbiri, işte çözüm çünkü şeyleri yapmaya çalışıyor çünkü (durumda herkes şimdiye istediğiniz aynı şey) benim noktamın 4 haneli yıl veren ay/gün/yıl formatı yoktur. Bir biçime koyarsam, yerelleştirmeyi kaybederim. Bu benim hayal kırıklığım. – Dave

+1

Aslında yerel olarak bağımlı: Danimarka kısa formatta 4 haneli bir yıl veren bir tanesi. Bu harika bir test vakası çünkü zaman içinde ':' kullanmıyor. –

10

NSLocale*   curLocale = [NSLocale currentLocale]; 
NSString*   dateFmt = [NSDateFormatter dateFormatFromTemplate: @"ddMMyyyy" 
                   options: 0 
                   locale: curLocale]; 
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease]; 
        [formatter setDateFormat:dateFmt]; 
NSString*   retText = [formatter stringFromDate:refDate]; 

return retText; 

Belki birisi bazen kullanabilirsin ... Bu eski tasarımda ise

+0

harika! Her zaman diğer çeşitli çözümlerle uğraştım ve bu da çekirdeği vurdu. Teşekkürler dostum. İyi işlere devam et. – Felipe

1

: gerçekten eski bir soru, işte benim çözümdür

NSString *FormatString = [NSDateFormatter dateFormatFromTemplate:@"MM/dd/yyyy HH:mm" options:0 locale:[NSLocale currentLocale]]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:FormatString]; 
//Parse date here with the formater (like [formatter stringFromDate:date]) 
[formatter release]; 
İlgili konular