2010-01-09 30 views
20

Tengo una cadena con formato de fecha y hora: "AAAA-MM-DD HH: MM: SS".Cómo manejar diferentes formatos de fecha y hora usando NSDateFormatter

yo uso esto en mi código fuente:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"%e. %B %Y"]; 
NSString *test = [formatter stringFromDate:@"2010-01-10 13:55:15"]; 

Quiero convertir de "2010-01-10 13:55:15" a "10 de enero 2010". Pero mi implementación no funciona.

¿Qué pasa aquí?

Muchas gracias de antemano & Atentamente.

Actualizado código fuente:

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; 
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"%Y-%m-%d %H:%M:%S"]; 
NSString *test1 = [formatter stringFromDate:@"2010-01-10 13:55:15"]; 

NSDateFormatter *formatter1 = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter1 setDateFormat:@"%d. %M4 %Y"]; 
NSString *test2 = [formatter1 stringFromDate:test1]; 
+0

pueden ayudarme con estan PREGUNTA http: // stackoverflow.com/questions/15162835/how-to-use-nsdateformatter-to-venezuela gracias – tony

Respuesta

32

Un formateador fecha sólo puede manejar un formato a la vez. Es necesario tomar este enfoque:

NSDateFormatter *f = [[NSDateFormatter alloc] init]; 
[f setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *date = [f dateFromString:@"2010-01-10 13:55:15"]; 

NSDateFormatter *f2 = [[NSDateFormatter alloc] init]; 
[f2 setDateFormat:@"d. MMMM YYYY"]; 
NSString *s = [f2 stringFromDate:date]; 

s ahora serán "10 de enero 2010"

+3

recuerde liberar los formateadores – user102008

1

Desea utilizar [NSFormatter dateFromString:] para convertir la fecha basado en cadena a una instancia NSDate. Desde allí, desea utilizar stringFromDate con NSDate, no la cadena como lo ha escrito anteriormente. No estoy seguro acerca de usar el mismo NSDateFormatter tanto para el análisis como para el formateo; es posible que necesite dos instancias separadas para manejar los diferentes estilos de formato.

+0

¿Quiere decir NSDateFormatter? Creo que estos métodos no están disponibles solo en iPhone Mac OS X. También se puede vincular a la biblioteca de referencia de Mac OS X. – Tim

+0

Las rutinas que yo hago referencia están disponibles también para el iPhone. Me alegro de que haya encontrado su respuesta de todos modos. – fbrereto

2

En primer lugar, asegúrese de establecer el comportamiento en 10.4 - más moderno, funciona mejor en mi experiencia.

[dateTimeFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 

A continuación, usted no puede utilizar el mismo formato para analizar y dar formato si tienen 2 diferentes representaciones de cadena, por lo que utilizar 2 formateadores, o cambiar el formato de cadena entre el análisis y luego formatear.

También asegúrese de considerar las opciones de formato:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1

minúscula es e es el día de la semana, d minúscula es el día del mes.

Por meses, el uso MMMM, no B.

+0

Hm, creo que no entiendo el "sistema". Actualicé mi primera publicación. No sé por qué esto no funcionará. – Tim

+0

Tuve un error tipográfico: por M4, me refiero a 4 Ms, como en MMMM - ¡Ups! –

+1

setFormatterBehavior: no es necesario en iPhone OS, solo * funciona * en el modo 10.4+. – benzado

6

Éstos son algunos ejemplos de trabajo con formateadores de datos de mi código. Debería poder tomar cualquiera de estas funciones y modificarla para su formato.

USO

NSDate *today = [NSDate date]; 
NSDateFormatter *dateFormatter = [Constants getTitleDateFormatter]; 
NSString *dateString = [dateFormatter stringFromDate:today];   
[dateFormatter release]; 

FUNCIONES

+ (NSDateFormatter *) getDateFormatterWithTimeZone { 
    //Returns the following information in the format of the locale: 
    //YYYY-MM-dd HH:mm:ss z (Z is time zone) 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setLocale:[NSLocale currentLocale]]; 
    [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterLongStyle]; 
    return dateFormatter; 

}

+ (NSDateFormatter *)dateFormatterWithoutYear { 
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    NSString *format = [dateFormatter dateFormat]; 
    format = [format stringByReplacingOccurrencesOfString:@"/yy" withString:@""]; 
    NSRange secondSpace; 
    secondSpace.location = format.length-2; 
    secondSpace.length = 1; 
    format = [format stringByReplacingCharactersInRange:secondSpace withString:@""]; 
    [dateFormatter setDateFormat:format]; 
    return dateFormatter; 
} 

+ (NSDateFormatter *) dateFormatterMonthDayOnly { 
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    NSString *format = [dateFormatter dateFormat]; 
    format = [format stringByReplacingOccurrencesOfString:@"/yy" withString:@""]; 
    NSRange range; 
    range.location = 0; 
    range.length = 3; 
    format = [format substringWithRange:range]; 
    [dateFormatter setDateFormat:format]; 
    return dateFormatter; 
} 

+ (NSDateFormatter *) getTitleDateFormatter { 
    //Returns the following information in the format of the locale: 
    //MM-dd-yyyy hh:mm:ssa 
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone]; 
    [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 
    NSString *format = [dateFormatter dateFormat]; 
    NSRange secondSpace; 
    secondSpace.location = format.length-2; 
    secondSpace.length = 1; 
    format = [format stringByReplacingOccurrencesOfString:@"/" withString:@"-"]; 
    format = [format stringByReplacingCharactersInRange:secondSpace withString:@""]; 
    [dateFormatter setDateFormat:format]; 
    return dateFormatter; 
} 
Cuestiones relacionadas