SimpleDateFormat ignora el mes al analizar

Resuelto manu asked hace 14 años • 4 respuestas

El siguiente código me proporciona la fecha analizada como "miércoles 13 de enero a las 00:00:00 EST de 2010" en lugar de "miércoles 13 de junio a las 00:00:00 EST de 2010". Cualquier idea es muy apreciada.

    SimpleDateFormat sf = new SimpleDateFormat("yyyy-mm-dd'T'HH:mm:ss");

    String str = "2010-06-13T00:00:00";

    Date date = sf.parse(str);

    System.out.println(" Date " + date.toString());
manu avatar Jun 17 '10 02:06 manu
Aceptado

Intentar:

"yyyy-MM-dd'T'HH:mm:ss"

MMsignifica mes. mmsignifica minutos. Consulte la documentación para SimpleDateFormatobtener más detalles sobre los patrones de fecha y hora admitidos.

Mark Byers avatar Jun 16 '2010 19:06 Mark Byers

El problema es que estás usando 'mm' como mes y 'mm' representa minutos. A continuación se muestran todos los formatos de fecha disponibles; lea más documentos aquí .

Symbol  Meaning                Kind         Example
D       day in year             Number        189
E       day of week             Text          E/EE/EEE:Tue, EEEE:Tuesday, EEEEE:T
F       day of week in month    Number        2 (2nd Wed in July)
G       era designator          Text          AD
H       hour in day (0-23)      Number        0
K       hour in am/pm (0-11)    Number        0
L       stand-alone month       Text          L:1 LL:01 LLL:Jan LLLL:January LLLLL:J
M       month in year           Text          M:1 MM:01 MMM:Jan MMMM:January MMMMM:J
S       fractional seconds      Number        978
W       week in month           Number        2
Z       time zone (RFC 822)     Time Zone     Z/ZZ/ZZZ:-0800 ZZZZ:GMT-08:00 ZZZZZ:-08:00
a       am/pm marker            Text          PM
c       stand-alone day of week Text          c/cc/ccc:Tue, cccc:Tuesday, ccccc:T
d       day in month            Number        10
h       hour in am/pm (1-12)    Number        12
k       hour in day (1-24)      Number        24
m       minute in hour          Number        30
s       second in minute        Number        55
w       week in year            Number        27
G       era designator          Text          AD
y       year                    Number        yy:10 y/yyy/yyyy:2010
z       time zone               Time Zone     z/zz/zzz:PST zzzz:Pacific Standard 
heloisasim avatar Feb 29 '2016 21:02 heloisasim

Respuesta moderna:

    String str = "2010-06-13T00:00:00";
    LocalDateTime dateTime = LocalDateTime.parse(str);
    System.out.println("Date-time " + dateTime);

Producción:

Fecha-hora 2010-06-13T00:00

Estoy usando y recomendando java.timela API moderna de fecha y hora de Java. Ni siquiera necesitamos un formateador explícito para el análisis. Esto se debe a que su cadena está en formato ISO 8601, el estándar internacional que las java.timeclases analizan como predeterminado. java.timesalió en 2014.

Mientras que en 2010, cuando se hizo esta pregunta, SimpleDateFormatera qué teníamos para analizar fechas y horas, esa clase ahora se considera obsoleta, afortunadamente, porque también era problemática.

En caso de que su cadena contenga solo una fecha sin hora del día, use la LocalDateclase de la misma manera (esto se hizo en una pregunta duplicada ).

    String dateStr = "2018-05-23";
    LocalDate date2 = LocalDate.parse(dateStr);
    System.out.println(date2);

2018-05-23

Enlace: Tutorial de Oracle: Fecha Hora explicando cómo usarlo java.time.

Anonymous avatar Apr 29 '2018 18:04 Anonymous