2010-07-29 41 views
5

Deseo obtener la hora UTC para 01/01/2100 en Java en '2100-01-01 00:00:00'. Me estoy poniendo "2100-01-01 00:08:00". Alguna idea, como corregir estoGenerando hora UTC en java

public Date getFinalTime() { 
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 

    DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
    Date finalTime = null; 

    try 
    { 
     finalTime = df.parse("01/01/2100");    
    } catch (ParseException e) 
    { 
     e.printStackTrace(); 
    } 

    calendar.setTime(finalTime); 
    return calendar.getTime(); 
} 

Respuesta

9

También debe especificar la zona horaria para SimpleDateFormat - actualmente eso es analizar la medianoche hora local que termina como 8am UTC.

TimeZone utc = TimeZone.getTimeZone("UTC"); 
Calendar calendar = Calendar.getInstance(utc); 

DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
df.setTimeZone(utc); 
Date finalTime = null; 

try 
{ 
    finalTime = df.parse("01/01/2100");    
} catch (ParseException e) 
{ 
    e.printStackTrace(); 
} 

calendar.setTime(finalTime); 

Como siempre sin embargo, yo personalmente recomiendo el uso de Joda Time que es mucho más capaz en general. Me gustaría traducir tu ejemplo a Joda Time si lo deseas.

Además, veo que está devolviendo calendar.getTime() - eso es lo mismo que devolver finalTime tan pronto como lo haya calculado.

Por último, simplemente tomar un ParseException y continuar como si no hubiera sucedido es una muy mala idea. Espero que esto sea solo un código de muestra y no refleje tu método real. Del mismo modo estoy suponiendo que realmente estará analizando otro texto - si no lo está, entonces como dijo Eyal, simplemente debe llamar a los métodos en Calendar directamente. (O, de nuevo, use Joda Time.)

2

También debe configurar el huso horario del objeto SimpleDateFormat, de lo contrario se presupone la zona horaria predeterminada.

De todos modos, parece que usar solo un Calendario es suficiente en su caso. Use sus ajustadores para establecer los valores correctos para todos los campos (año, mes, día, hora, etc.) y luego recupere la hora.

+0

Si el OP solo tiene una cadena como entrada, tendría sentido utilizar las clases integradas para realizar el análisis sintáctico en lugar de analizarlo él mismo, ¿o no? –

+0

@Jon Skeet: No entendí por su explicación que se le da una cadena variable como entrada. Supuse que es un valor fijo, que desvía un límite de tiempo (año 2100). –

+0

Supuse que era solo una muestra: si realmente no desea analizar el texto, sería extraño (y erróneo) usar SimpleDateFormat. –

Cuestiones relacionadas