2011-02-27 16 views
9

En mi aplicación de iPhone, me gustaría poder determinar si el formato de fecha de la configuración regional es Mes/Día (es decir, 1/5 para el quinto de enero) o Día/Mes (es decir, 5/1 para el quinto de enero). Tengo un NSDateFormatter personalizado que no usa uno de los formatos básicos como NSDateFormatterShortStyle (11/23/37).¿Cómo determinar si el formato de fecha de la configuración regional es Mes/Día o Día/Mes?

En un mundo ideal, quiero usar NSDateFormatterShortStyle, pero simplemente no mostrar el año (solo el mes & día #). ¿Cuál es la mejor manera de lograr esto?

Respuesta

18

que desea utilizar de NSDateFormatter + dateFormatFromTemplate: Opciones: locale:

Aquí es un poco de manzana código de ejemplo:

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

Gracias! Esto es exactamente lo que estaba buscando. – Jason

4

Basándose en el código de ejemplo, he aquí una sola línea para determinar si la corriente escenario es el día primero (nb me cayó la 'Y' como que no nos concierne a esta pregunta.):

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

NB. Los documentos para dateFormatFromTemplate indican que "la cadena devuelta puede no contener exactamente los componentes que se proporcionan en la plantilla, pero puede, por ejemplo, tener ajustes específicos de la configuración regional aplicados". dado esto, a veces la prueba puede devolver FALSO debido a un formato desconocido (lo que significa que por defecto es de un mes cuando no está claro). Decide por ti mismo cuál es el predeterminado que prefieres, o si necesitas mejorar la prueba para admitir configuraciones regionales adicionales.

Cuestiones relacionadas