2010-10-14 14 views
8

Soy un novato en Java y por lo tanto no he podido resolver esto desde hace bastante tiempo.JAVA TimeZone issue EDT Vs EST

Estoy usando Windows XP y la máquina está configurada en TimeZone: Eastern Time (EE. UU. & Canadá).

Tengo una aplicación Java, que toma la hora actual del sistema y la información de la zona horaria y escribe una cadena como: 20101012 15:56:00 EST, en un archivo.

La última parte de la fecha anterior, es decir, la zona horaria, cambia de EST a EDT cuando cambio la fecha de mi sistema.

Siendo precisos: Desde noviembre (por ejemplo: noviembre de 2009) hasta marzo (marzo de 2010), es EST, de lo contrario EDT.

EST es lo que quiero SIEMPRE y no EDT.

¿Existe alguna clase/función en particular, por la cual siempre puedo leerlo como EST?

En espera de la respuesta.


Gracias por sus respuestas. Bueno, olvidé mencionar algunas cosas.

  1. Quiero que mi máquina para colocar en: Hora del Este (Estados Unidos & Canadá) en la configuración de zona horaria de Windows.

  2. En términos simples, lo que quiero hacer es: hacer que mi tiempo de máquina, y escribirla en un archivo de texto

  3. Soy consciente del horario de verano, que sucede a partir de marzo a noviembre

Pero el problema es que cuando escribo la hora de mi máquina en el archivo, está escrito como 2010 01 12 15:56:00 EST si el horario de verano (DST) no está presente y como 20101012 15:56:00 EDT , si el horario de verano está presente. Mi preocupación es si es DST o no, quiero escribir EST siempre.

+2

Si el tiempo en el archivo es '20101012 15:56:00 EDT' ¿quieres leerlo como' 20101012 15:56:00 EST' o '20101012 14:56:00 EST'? Me arriesgaré a que estés calculando compensaciones de tiempo y te quemarán los cambios de tiempo. –

+2

Si esto es por razones de registro, considere registrar la hora como UTC en su lugar. – Powerlord

Respuesta

3

No creo que deba hacer lo que está sugiriendo.

Usted dice que, independientemente de cuál sea su zona horaria del sistema actualmente (la hora del este no es su zona horaria, pero es UTC + 5 o +4), desea que muestre EST. Esto es simplemente incorrecto. Supongamos que es en el verano, y su computadora piensa que es el 15/6 15:00 a nivel local.Imprime la hora actual y la que se obtiene:

El tiempo que imprime esta fuera en: 2010 06 15 15:00:00 EDT

Por alguna razón, se piensa que el EDT es desagradable, y así lo cambia a EST:

imprimo esta fuera en: 2010 06 15 15:00:00 EST Sin embargo

, si a continuación, enviar a alguien que fragmento de correo ¡Dentro de la próxima hora, se verán obligados a pensar que viajó del futuro! Desde las 15:00:00 EST es a las 16:00:00 EDT.

+0

Ha Ha ... Buen ejemplo. Tienes mucha razón Pero, estoy tratando con un servidor al que tengo que decir: "Haz una tarea en 20101015 15:30:30 xxx" xxx siendo la zona horaria. El servidor solo entiende EST y no EDT sea el mes que sea. Por lo tanto, EDT es desagradable. – ViV

-1

la máquina se establece en Zona horaria: hora del este (EE.UU. & Canadá).

Esa no es una zona horaria real (tampoco lo son EDT y EST). Un huso horario (como lo entiende Java) es algo así como "América/Phoenix", que es un ID para una zona horaria administrativa que tiene un desplazamiento de base y (opcionalmente) cambia al horario de verano en fechas específicas. Ambos pueden cambiar y es necesario tener en cuenta dichos cambios al interpretar las fechas históricas.

Por lo tanto, si no desea tener interruptores DST, elija una zona horaria que no observe DST. Es posible que no exista tal zona horaria y tratar de actuar como si hubiera introducir fechas imposibles.

0

Cabe señalar que durante los meses de verano de la zona horaria del este, casi todos los centros principales usan el horario de verano, por lo que se muestra correctamente el tiempo que a las personas en esa zona horaria les importa.

Si quieren que sea una zona horaria específica, en lugar de la zona horaria por defecto/sistema, entonces puede forzar la TimeZone a EST a través de algo como esto:

TimeZone est = TimeZone.getTimeZone("EST"); 

Aunque como Michael se mencionó anteriormente, la documentación recomienda usar un nombre completo local como "América/Nueva York" en lugar de la abreviatura general de la zona horaria.

Si desea afirmar que realmente es EST aunque sepa que es EDT, entonces supongo que podría hacer lo siguiente: utilizar una instancia de SimpleDateFormat con un patrón personalizado que no incluya la información de la zona horaria, luego ponga "EST" en el extremo de la cuerda que escribe.

2

me gustaría crear una zona personalizada:

TimeZone alwaysEst = TimeZone.getTimeZone("EST+5"); 

que informará como EST y siempre será de 5 horas por delante del GMT. En particular, no elija una zona horaria existente o eventualmente se quemará cuando una actualización de zona cambie la definición.

Tenga en cuenta que forzando EST las fechas que inicie sesión solo coincidirán con el tiempo mostrado por el sistema durante 5 meses al año. Los otros 7 meses estarás a una hora de descanso. Puede simplificar el análisis del archivo, pero confundirá a los usuarios.

0

Su pregunta todavía no está clara.

No entendí si simplemente desea forzar los caracteres 'EST', incluso si su máquina está configurada para cambiar automáticamente el horario de verano, o lo que quiere es obtener el tiempo real en EST.

lo que tiene dos opciones:

  1. Su tiempo de máquina se ajusta a 2:15 pm y el horario de verano en el efecto y que desea escribir 14:15 EST (que no es el tiempo real correcto) deberías usar SimpleDateFormat. De esta manera, estarás mintiendo sobre el tiempo. Pero, de todos modos, sabes lo que mejor se adapta a ti.

  2. Su tiempo de máquina se ajusta a 2:15 pm y el horario de verano en el efecto, y usted quiere escribir 13:15 EST, se debe utilizar: TimeZone.setDefault (TimeZone.getTimeZone ("EST"))

+0

Gracias por la claridad que trajo. Me gustaría implementar la opción 1, es difícil de entender. ¿Puede explicar más detalladamente cómo puedo usar SimpleDateFormat para escribirlo como 2.15 pm EST? Gracias – ViV

+1

Pruebe System.out.println (nuevo SimpleDateFormat ("aaaamMMdd hh: mm: ss a 'EST'") formato (yourDate)); y mira los resultados. Mire en SimpleDateFormat javadoc para numerosas letras de patrones que tiene. –

0

La solución depende de por qué está escribiendo este tiempo de espera y qué quiere hacer con él cuando lo vuelve a leer (lo que se va a usar, no "lo que quiere"). Siempre escribiéndolo como EST es una tergiversación de los hechos. Cuando EDT está en efecto es no, de hecho, EST. Si está intentando rastrear un punto "absoluto" en el tiempo, le recomiendo que trabaje en GMT en lugar de cualquier zona horaria.

+0

Tienes mucha razón, Stephen. Respondiendo a su pregunta, así es como se usa el tiempo escrito: estoy tratando con un servidor al que tengo que decir: "Haga una tarea en 20101015 15:30:30 xxx" (Esta es la cadena de tiempo que escribo archivar). xxx es la zona horaria. El servidor solo entiende EST y no EDT, independientemente del mes que sea. Escribir EDT como EST es malinterpretar los hechos, estoy de acuerdo. Pero estoy un poco forzado a hacerlo. – ViV