434 votos

¿Cómo puedo obtener la fecha actual y la hora en UTC o GMT en Java?

Cuando creo una nueva Date objeto, se inicializa en el momento actual, pero en la zona horaria local. ¿Cómo puedo obtener la fecha actual y la hora en GMT?

378voto

Jon Skeet Puntos 692016

java.util.Date es no tiene tiempo específico de la zona, aunque su valor es más comúnmente considerado en relación a UTC. ¿Qué te hace pensar que en la hora local?

Para ser exactos: el valor en java.util.Date es el número de milisegundos desde la época Unix, que se produjo en la medianoche del 1 de enero de 1970, hora universal UTC. De la misma época también podría ser descrito en otras zonas de tiempo, pero la tradicional descripción en términos de UTC. Como es un número de milisegundos desde un fijo época, el valor en java.util.Date es el mismo en todo el mundo en cualquier instante determinado, independientemente de la zona horaria local.

Sospecho que el problema es que la visualización a través de una instancia de Calendario que utiliza la zona horaria local, o la posibilidad de usar Date.toString() , que también utiliza la zona horaria local, o un SimpleDateFormat de instancia, que, por defecto, también utiliza la zona horaria local.

Si este no es el problema, por favor, puesto que el código de ejemplo.

Yo, sin embargo, se recomienda que utilice Joda Tiempo de todos modos, lo que ofrece una idea mucho más clara de la API.

268voto

Dan Puntos 1329
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));

//Local time zone   
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");

//Time in GMT
return dateFormatLocal.parse( dateFormatGmt.format(new Date()) );

83voto

Someone Somewhere Puntos 8361

Esto sin duda devuelve la hora UTC: como Cadena y objetos de Fecha !

static final String DATEFORMAT = "yyyy-MM-dd HH:mm:ss"

public static Date GetUTCdatetimeAsDate()
{
    //note: doesn't check for null
    return StringDateToDate(GetUTCdatetimeAsString());
}

public static String GetUTCdatetimeAsString()
{
    final SimpleDateFormat sdf = new SimpleDateFormat(DATEFORMAT);
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    final String utcTime = sdf.format(new Date());

    return utcTime;
}

public static Date StringDateToDate(String StrDate)
{
    Date dateToReturn = null;
    SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);

    try
    {
        dateToReturn = (Date)dateFormat.parse(StrDate);
    }
    catch (ParseException e)
    {
        e.printStackTrace();
    }

    return dateToReturn;
}

65voto

Ahmad Nadeem Puntos 484
    Calendar c = Calendar.getInstance();
    System.out.println("current: "+c.getTime());

    TimeZone z = c.getTimeZone();
    int offset = z.getRawOffset();
    if(z.inDaylightTime(new Date())){
        offset = offset + z.getDSTSavings();
    }
    int offsetHrs = offset / 1000 / 60 / 60;
    int offsetMins = offset / 1000 / 60 % 60;

    System.out.println("offset: " + offsetHrs);
    System.out.println("offset: " + offsetMins);

    c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
    c.add(Calendar.MINUTE, (-offsetMins));

    System.out.println("GMT Time: "+c.getTime());

50voto

Antonio Puntos 2291

En realidad, no hay tiempo, pero es la representación podría ser cambiado.

SimpleDateFormat f = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(f.format(new Date()));

El tiempo es el mismo en cualquier punto de la Tierra, pero nuestra percepción del tiempo podrían ser diferentes dependiendo de la ubicación.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X