separar reloj posicion hora funcion formato fecha como cambiar año iphone ios internationalization nsdate nsdateformatter

iphone - reloj - funcion formato fecha access



¿Cómo determinar si el formato de fecha de la configuración regional es Mes/Día o Día/Mes? (2)

Desea utilizar NSDateFormatter''s + dateFormatFromTemplate: options: locale:

Aquí hay un código de muestra de Apple:

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

En mi aplicación para 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 (23/11/37).

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


Basándonos en el código de ejemplo, aquí hay una línea para determinar si la configuración regional actual es el día primero (nb. Dejé caer la ''y'' ya que no nos concierne para esta pregunta):

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

NÓTESE BIEN. Los documentos para dateFormatFromTemplate indican que "la cadena devuelta puede no contener exactamente los componentes proporcionados 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.