Te damos la bienvenida a nuestra página web, en este sitio vas a encontrar la solucíon que estás buscando.
Solución:
Utilice DateFormat. Por ejemplo,
SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
isoFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = isoFormat.parse("2010-05-23T09:01:02");
Sé consciente de java.util.Date
los objetos no contienen ninguna información de zona horaria por sí mismos; no puede establecer la zona horaria en un Date
objeto. Lo único que un Date
El objeto contiene es un número de milisegundos desde la “época” – 1 de enero de 1970, 00:00:00 UTC.
Como muestra ZZ Coder, configura la zona horaria en el DateFormat
objeto, para indicarle en qué zona horaria desea mostrar la fecha y la hora.
tl; dr
… analizado … de una cadena … la zona horaria no está especificada … Quiero establecer una zona horaria específica
LocalDateTime.parse( "2018-01-23T01:23:45.123456789" ) // Parse string, lacking an offset-from-UTC and lacking a time zone, as a `LocalDateTime`.
.atZone( ZoneId.of( "Africa/Tunis" ) ) // Assign the time zone for which you are certain this date-time was intended. Instantiates a `ZonedDateTime` object.
Sin zona horaria en juDate
Como se indica en las otras respuestas correctas, un java.util.Date no tiene zona horaria†. Representa UTC / GMT (sin compensación de zona horaria). Muy confuso porque es toString
El método aplica la zona horaria predeterminada de la JVM al generar una representación de cadena.
Evite juDate
Por esta y muchas otras razones, debe evitar el uso de java.util.Date & .Calendar & java.text.SimpleDateFormat integrados. Son notoriamente problemáticos.
En su lugar, utilice el paquete java.time incluido con Java 8.
java.time
Las clases java.time pueden representar un momento en la línea de tiempo de tres formas:
- UTC (
Instant
) - Con un desplazamiento (
OffsetDateTime
conZoneOffset
) - Con una zona horaria (
ZonedDateTime
conZoneId
)
Instant
En java.time, el bloque de construcción básico es Instant
, un momento en la línea de tiempo en UTC. Usar Instant
objetos para gran parte de su lógica empresarial.
Instant instant = Instant.now();
OffsetDateTime
Aplique un desplazamiento de UTC para ajustarlo a la hora del reloj de pared de alguna localidad.
Aplicar una ZoneOffset
para conseguir un OffsetDateTime
.
ZoneOffset zoneOffset = ZoneOffset.of( "-04:00" );
OffsetDateTime odt = OffsetDateTime.ofInstant( instant , zoneOffset );
ZonedDateTime
Mejor es aplicar una zona horaria, una compensación más las reglas para manejar anomalías como el horario de verano (DST).
Aplicar una ZoneId
a una Instant
conseguir un ZonedDateTime
. Siempre especifique un nombre de zona horaria adecuado. Nunca use 3-4 abreviaturas como EST
o IST
que no son únicos ni estandarizados.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
LocalDateTime
Si la entrada string carecía de cualquier indicador de compensación o zona, analizar como un LocalDateTime
.
Si está seguro de la zona horaria prevista, asigne un ZoneId
para producir un ZonedDateTime
. Ver ejemplo de código arriba en tl; dr sección en la parte superior.
Cadenas formateadas
Llama a toString
en cualquiera de estas tres clases para generar una cadena que represente el valor de fecha y hora en el formato estándar ISO 8601. los ZonedDateTime
La clase amplía el formato estándar añadiendo el nombre de la zona horaria entre paréntesis.
String outputInstant = instant.toString(); // Ex: 2011-12-03T10:15:30Z
String outputOdt = odt.toString(); // Ex: 2007-12-03T10:15:30+01:00
String outputZdt = zdt.toString(); // Ex: 2007-12-03T10:15:30+01:00[Europe/Paris]
Para otros formatos use el DateTimeFormatter
clase. Por lo general, es mejor dejar que esa clase genere formatos localizados utilizando el lenguaje humano y las normas culturales esperadas del usuario. O puede especificar un formato particular.
Sobre java.time
los java.time framework está integrado en Java 8 y versiones posteriores. Estas clases suplantan las antiguas y problemáticas clases de fecha y hora heredadas, como java.util.Date
, Calendar
Y SimpleDateFormat
.
Para obtener más información, consulte el Tutorial de Oracle. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.
los Joda-Time proyecto, ahora en modo de mantenimiento, aconseja la migración a las clases java.time.
Puedes intercambiar java.time objetos directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. Sin necesidad de cuerdas, sin necesidad de java.sql.*
clases. Compatibilidad con Hibernate 5 y JPA 2.2 java.time.
¿Dónde obtener las clases java.time?
- Java SE 8, Java SE 9, Java SE 10, Java SE 11y posterior: parte de la API estándar de Java con una implementación integrada.
- Java 9 trajo algunas características menores y correcciones.
- Java SE 6 y Java SE 7
- La mayoría de java.time la funcionalidad está respaldada a Java 6 y 7 en ThreeTen-Backport.
- Androide
- Versiones posteriores de implementaciones de paquetes de Android (26+) del java.time clases.
- Para Android anterior (<26), un proceso conocido como API desugaring trae un subconjunto del java.time funcionalidad no incorporada originalmente en Android.
- Si el desugaring no ofrece lo que necesita, el ThreeTenABP el proyecto se adapta ThreeTen-Backport (mencionado anteriormente) a Android. Ver Cómo usar ThreeTenABP….
Joda-Time
Si bien Joda-Time todavía se mantiene activamente, sus creadores nos han dicho que migremos a java.time tan pronto como sea conveniente. Dejo esta sección intacta como referencia, pero sugiero usar la java.time
sección anterior en su lugar.
En Joda-Time, un objeto de fecha y hora (DateTime
) realmente conoce su zona horaria asignada. Eso significa un desplazamiento de UTC y las reglas y el historial del horario de verano (DST) de esa zona horaria y otras anomalías similares.
String input = "2014-01-02T03:04:05";
DateTimeZone timeZone = DateTimeZone.forID( "Asia/Kolkata" );
DateTime dateTimeIndia = new DateTime( input, timeZone );
DateTime dateTimeUtcGmt = dateTimeIndia.withZone( DateTimeZone.UTC );
Llama a toString
método para generar una cadena en formato ISO 8601.
String output = dateTimeIndia.toString();
Joda-Time también ofrece amplias capacidades para generar todo tipo de otros formatos de cadenas.
Si es necesario, puede convertir de Joda-Time DateTime a java.util.Date.
Java.util.Date date = dateTimeIndia.toDate();
Busque en StackOverflow “joda date” para encontrar muchos más ejemplos, algunos bastante detallados.
†En realidad hay es una zona horaria incrustada en un java.util.Date, que se utiliza para algunas funciones internas (consulte los comentarios de esta respuesta). Pero esta zona horaria interna no se expone como una propiedad y no se puede establecer. Esta zona horaria interna es no el usado por el toString
método para generar un string representación del valor de fecha y hora; en su lugar, la zona horaria predeterminada actual de la JVM se aplica sobre la marcha. Entonces, como abreviatura, a menudo decimos “juDate no tiene zona horaria”. ¿Confuso? Si. Otra razón más para evitar estas viejas clases cansadas.
No se te olvide compartir esta reseña si te ayudó.