java - studio - SimpleDateFormat ignorando el mes al analizar
simpledateformat java 8 (4)
El siguiente código me da la fecha analizada como "Mié 13 de enero 00:00:00 EST 2010" en lugar de "Mié 13 de junio 00:00:00 EST 2010". Cualquier idea 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());
Ejemplo si la fecha es 06 07 2016
SimpleDateFormat sdf= new SimpleDateFormat("dd MM yyyy");
puede usar comas, puntos completos, barras o guiones entre estos formatos.
Ex: dd-mm-yyyy, it will display like(06-07-2016)
dd/mm/yyyy,it will display like(06/07/2016)
dd.mm.yyyy,it will display like(06.07.2016)
dd,mm,yyyy ,it will display like(06,07,2016)
MM - will display number of the Month.
MMM - will display Month Three character only(Ex: Jul)
MMMM - will display full month(Ex: July)
yyyy - will display full year(2016)
yy - will display last two digits(16)
hh - will display hours
mm -will display minutes
ss - will display seconds
a - will display AM or PM
Ex: if time is 12:09:10 PM means (hh:mm:ss a)
EEE- will display short week name(Ex: Wed)
EEEE- will display full week name(Ex: Wednesday)
El problema es que está utilizando ''mm'' como mes y ''mm'' representa minutos. A continuación se muestra todos los formatos de fecha disponibles, lea más doc here .
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
Respuesta moderna:
String str = "2010-06-13T00:00:00";
LocalDateTime dateTime = LocalDateTime.parse(str);
System.out.println("Date-time " + dateTime);
Salida:
Fecha y hora 2010-06-13T00: 00
Estoy usando y recomendando java.time
, la moderna API de fecha y hora de Java. Ni siquiera necesitamos un formateador explícito para analizar. Esto se debe a que su cadena está en formato ISO 8601, el estándar internacional que las clases java.time
analizan como su valor predeterminado. java.time
salió en 2014.
Mientras que en 2010, cuando se hizo esta pregunta, SimpleDateFormat
era lo que teníamos para analizar fechas y horas, esa clase ahora se considera obsoleta, afortunadamente, porque también fue problemática.
En caso de que su cadena contenga solo una fecha sin hora del día, use la clase LocalDate
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 y hora que explica cómo usar java.time
.
Tratar:
"yyyy-MM-dd''T''HH:mm:ss"
MM
significa mes. mm
significa minutos. Consulte la documentación de SimpleDateFormat
para obtener más detalles de los patrones de fecha y hora admitidos.