2012-03-12 22 views
13

Tengo este código donde intento obtener la fecha actual y formatearla en la configuración regional actual.¿Cómo formateo la fecha actual de la configuración regional del usuario?

NSDate *now = [NSDate date]; // gets current date 
NSString *sNow = [[NSString alloc] initWithFormat:@"%@",now]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"mm-dd-yyyy"]; 
insertCmd = [insertCmd stringByAppendingString: formatter setDateFormat: @"MM.dd.yyyy"]; 

sé la última línea está mal, pero parece que no puede averiguarlo ... "insertCmd" es un NSString que estoy construyendo para un comando FMDB.

Ayuda sería muy apreciada, o un puntero al "documento" donde se describe.

Respuesta

29

No utilizaría setDateFormat en este caso, porque restringe el formateador de fecha a un formato de fecha específico (doh!) - desea un formato dinámico según la configuración regional del usuario.

NSDateFormatter le proporciona un conjunto de fecha/hora integrada estilos que puede elegir, es decir, NSDateFormatterMediumStyle, NSDateFormatterShortStyle y así sucesivamente.

Así que lo que debe hacer es:

NSDate* now = [NSDate date]; 
NSDateFormatter* df = [[NSDateFormatter alloc] init]; 
[df setDateStyle:NSDateFormatterMediumStyle]; 
[df setTimeStyle:NSDateFormatterShortStyle]; 
NSString* myString = [df stringFromDate:now]; 

Esto le proporcionará una cadena con una fecha de longitud media y un tiempo de longitud corta, todo dependiendo de la configuración regional del usuario. Experimenta con la configuración y elige lo que quieras.

He aquí una lista de estilos disponibles: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/c/tdef/NSDateFormatterStyle

3

Si desea que la fecha y la hora localizada Esto le dará a usted:

NSString *localizedDateTime = [NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle]; 

El código anterior no le da la fecha y hora localizada .

5

En adición a jiayow respuesta puede especificar el encargo de 'plantilla' para obtener la versión localizada:

+ (NSString *)formattedDate:(NSDate *)date usingTemplate:(NSString *)template { 
    NSDateFormatter* formatter = [NSDateFormatter new]; 

    formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:template options:0 locale:formatter.locale]; 

    return [formatter stringFromDate:date]; 
} 

Ejemplo de uso de los EEUU/de locale:

NSLocale *enLocale = [NSLocale localeWithLocaleIdentifier:@"en_US"]; 
NSLocale *deLocale = [NSLocale localeWithLocaleIdentifier:@"de"]; 

// en_US: MMM dd, yyyy 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"ddMMMyyyy" options:0 locale:enLocale]; 
// de:  dd. MMM yyyy 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"ddMMMyyyy" options:0 locale:deLocale]; 

// en_US: MM/dd/yyyy 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"ddyyyyMM" options:0 locale:enLocale]; 
// de:  dd.MM.yyyy 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"ddyyyyMM" options:0 locale:deLocale]; 

// en_US MM/dd 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"MMdd" options:0 locale:enLocale]; 
// de:  dd.MM. 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"MMdd" options:0 locale:deLocale]; 
Cuestiones relacionadas