La manera moderna es con las clases java.time.
ZonedDateTime
especificar un patrón de formato para que coincida con su cadena de entrada. Los códigos son similares a SimpleDateFormat
pero no exactamente. Asegúrese de leer el documento de clase para DateTimeFormatter
. Tenga en cuenta que especificamos un Locale
para determinar qué idioma humano usar para el nombre del día de la semana y el nombre del mes.
String input = "Wed Jul 08 17:08:48 GMT 2009";
DateTimeFormatter f = DateTimeFormatter.ofPattern ("EEE MMM dd HH:mm:ss z uuuu" , Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse (input , f);
zdt.toString(): 2009-07-08T17: 08: 48Z [GMT]
Podemos ajustar eso en cualquier otra zona horaria.
Especifique un proper time zone name en el formato de continent/region
. Nunca use la abreviatura de 3-4 letras como CDT
o EST
o IST
ya que no son zonas horarias verdaderas, no están estandarizadas y ni siquiera son únicas (!).
Supongo que por CDT
quiere decir una zona horaria como America/Chicago
.
ZoneId z = ZoneId.of("America/Chicago");
ZonedDateTime zdtChicago = zdt.withZoneSameInstant(z);
zdtChicago.toString() 2009-07-08T12: 08: 48-05: 00 [América/Chicago]
Instant
Generalmente mejor manera de trabajar en UTC. Para ese extracto un Instant
. La clase Instant
representa un momento en la línea de tiempo en UTC con una resolución de nanoseconds (hasta nueve (9) dígitos de una fracción decimal).
Esta clase Instant
es una clase básica básica de java.time. Puede pensar en ZonedDateTime
como Instant
más ZoneId
.
Instant instant = zdtChicago.toInstant();
instant.toString(): 2009-07-08T17: 08: 48Z
Sobre java.time
java.time El marco está construido en Java y 8 luego. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora legacy, como java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
. El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a java.time.
Para obtener más información, consulte el Oracle Tutorial. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.
¿Dónde obtener las clases java.time?
- Java SE 8 y SE 9 y más tarde
- incorporado.
- Parte de la API estándar de Java con una implementación integrada.
- Java 9 agrega algunas características menores y correcciones.
- Java SE 6 y SE 7
- Gran parte de la funcionalidad de back-java.time está portado a Java 6 & 7 en ThreeTen-Backport.
- Android
- El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) para Android específicamente.
- Ver How to use….
El proyecto se extiende ThreeTen-Extra java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
y more.
Lamentablemente no puedo agregar otra dependencia sin más burocracia que quiero tratar. Debe haber una forma de formatear las zonas horarias utilizando las bibliotecas estándar de Java. –
Hay, como se da en la respuesta. Solo espera más dolor si tienes que manipular cualquier otra fecha/hora. –
No está ayudando. El formateador siempre escupe el tiempo en GMT y no el CDT requerido. –