iphone - como - Cómo manejar diferentes formatos de fecha y hora usando NSDateFormatter
obtener fecha actual swift (4)
Tengo una cadena con un formato de fecha y hora: "YYYY-MM-DD HH: MM: SS".
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 de 2010". Pero mi implementación no funciona.
¿Qué está mal aquí?
Muchas gracias de antemano y Saludos cordiales.
Código fuente actualizado:
[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];
Aquí hay algunos ejemplos de cómo trabajar 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];
Las 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;
}
Desea utilizar [NSFormatter dateFromString:]
para convertir su fecha basada en cadena en una instancia de NSDate
. Desde allí, desea usar stringFromDate
con el NSDate
, no la cadena que ha escrito anteriormente. No estoy seguro 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.
En primer lugar, asegúrese de configurar el comportamiento en 10.4: más moderno, funciona mejor en mi experiencia.
[dateTimeFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
A continuación, no puede usar el mismo formato para analizar y formatear si tienen 2 representaciones de cadena diferentes, así que use 2 formateadores, o cambie el formato de cadena entre el análisis y luego el formato.
También asegúrese de considerar las opciones de formato:
minúscula es e es el día de la semana, minúscula d es el día del mes.
Por mes, use MMMM, no B.
Un formateador de fecha solo puede manejar un formato a la vez. Tienes que 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 será ahora "10. enero 2010"