Cómo almacenar una fecha en ET con el offset cuando se ejecuta el código Java en UTC

Gayatri:

Almacenamos una fecha en una tabla de SQL Server db como varchar. Cuando esto se lee en el código java como una cadena y luego se analiza para una fecha, que se lee como UTC (código de Java se encuentra en servidores que están en UT). Y en la reconversión de la fecha de ET, que va de 4 horas atrás. ¿Cómo manejo almacenar la fecha en ET en esta columna db por lo que se lee como ET en el código java.

Estamos investigando en torno a las compensaciones, pero no comprender exactamente qué hacer.

fecha varchar en la tabla 29/03/2019 23:23:03 // queremos que esta fecha sea en ET

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date beginDate = sdf.parse("03/29/2019 23:23:03");

// El problema es cuando este código se ejecuta, el servidor está en UTC. Así BeginDate // se lee como 29/03/2019 23:23:03 GMT 03/29/2019 23:23:03 en lugar de ET

03/29/2019 23:23:03 ET esperada real 29/03/2019 23:23:03 UTC

Jon Skeet:

En primer lugar, hay que ser conscientes de que un Dateobjeto no tiene una zona horaria en absoluto . Es sólo un instante en el tiempo. Así que incluso cuando se ha analizado sintácticamente el valor correctamente, va a representar el instante justo en el tiempo, pero puede que tenga que volver a convertirlo en hora del este más adelante.

En segundo lugar, es necesario tener en cuenta que el almacenamiento de valores como esta ambigüedad introduce - Si almacena un valor de (digamos) 11.03.2019 01:30 hora local, que ocurre dos veces - una vez antes del horario de verano de transición y una vez después. Si va a almacenar los tiempos siempre en el pasado, al menos debe considerar el almacenamiento UTC lugar - a pesar de que no siempre es la respuesta correcta, sobre todo si no lo está almacenando valores de fecha futura / hora .

Para la parte de análisis, sólo tiene que establecer la zona horaria en el Calendarutilizado por SimpleDateFormat. Por ejemplo:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.US);
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York");
Date beginDate = sdf.parse("03/29/2019 23:23:03");

Por último, me gustaría fuertemente aconsejo empezar a migrar el código para utilizar java.timesi es posible. Es una API más agradable tanto que la java.util.DateAPI etc.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=183569&siteId=1
Recomendado
Clasificación