2011-02-27 24 views
9

iPhone uygulamamda, kullanıcının yerel ayarının tarih formatının Ay/Gün (ör. Beşinci Ocak ayı için 1/5) veya Gün/Ay (yani beşinci Ocak ayı için 5/1) olup olmadığını belirleyebilirim. NSDateFormatterShortStyle (11/23/37) gibi temel biçimlerden birini kullanmayan özel bir NSDateFormatter sahibim.Yerel ayarın tarih formatının Ay/Gün veya Gün/Ay olup olmadığı nasıl belirlenir?

İdeal bir dünyada, NSDateFormatterShortStyle'ı kullanmak istiyorum, ancak yalnızca yılı görüntülemiyor (yalnızca ay & gün #). Bunu başarmanın en iyi yolu nedir? seçenekleri:

cevap

18

Sen NSDateFormatter en + dateFormatFromTemplate kullanmak istediğiniz yerel ayarı:

İşte

bazı Apple örnek kod: Burada, örnek kod üzerinde

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
NSLocale *gbLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; 

NSString *dateFormat; 
NSString *dateComponents = @"yMMMMd"; 

dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:usLocale]; 
NSLog(@"Date format for %@: %@", 
    [usLocale displayNameForKey:NSLocaleIdentifier value:[usLocale localeIdentifier]], dateFormat); 

dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:gbLocale]; 
NSLog(@"Date format for %@: %@", 
    [gbLocale displayNameForKey:NSLocaleIdentifier value:[gbLocale localeIdentifier]], dateFormat); 

// Output: 
// Date format for English (United States): MMMM d, y 
// Date format for English (United Kingdom): d MMMM y 
+0

Teşekkürler! Tam olarak aradığım şey bu. – Jason

4

Bina akım olmadığını belirlemek için tek liner

BOOL dayFirst = [[NSDateFormatter dateFormatFromTemplate:@"MMMMd" options:0 locale:[NSLocale currentLocale]] hasPrefix:@"d"]; 

: yerel günlük ilk (. nb Bunun bu soru için bizi ilgilendirmez olarak 'y' düştü) 'dir

NB. dateFormatFromTemplate için dokümanlar, "İade edilen dizgede şablonda verilen bileşenler bulunmayabilir, ancak örneğin yerel olarak belirli ayarlamalar yapılabilir" ifadesi yer alır. Bu, bazen testin bilinmeyen bir formattan dolayı FALSE döndürmesine neden olabilir (yani belirsiz olduğunda ay ilkinden başlayarak). Tercih ettiğiniz varsayılanı kendiniz belirleyin veya ek lokalleri desteklemek için testi geliştirmeniz gerekiyorsa.

İlgili konular