When I create a new Date
object, it is initialized to the current time but in the local timezone. How can I get the current date and time in GMT?
相关问题
- Delete Messages from a Topic in Apache Kafka
- Jackson Deserialization not calling deserialize on
- How to maintain order of key-value in DataFrame sa
- StackExchange API - Deserialize Date in JSON Respo
- Difference between Types.INTEGER and Types.NULL in
If you're using joda time and want the current time in milliseconds without your local offset you can use this:
With:
Then
cal
have the current date and time.You also could get the current Date and Time for timezone with:
You could ask
cal.get(Calendar.DATE);
or other Calendar constant about others details.Date and Timestamp are deprecated in Java. Calendar class it isn't.
java.util.Date
has no specific time zone, although its value is most commonly thought of in relation to UTC. What makes you think it's in local time?To be precise: the value within a
java.util.Date
is the number of milliseconds since the Unix epoch, which occurred at midnight January 1st 1970, UTC. The same epoch could also be described in other time zones, but the traditional description is in terms of UTC. As it's a number of milliseconds since a fixed epoch, the value withinjava.util.Date
is the same around the world at any particular instant, regardless of local time zone.I suspect the problem is that you're displaying it via an instance of Calendar which uses the local timezone, or possibly using
Date.toString()
which also uses the local timezone, or aSimpleDateFormat
instance, which, by default, also uses local timezone.If this isn't the problem, please post some sample code.
I would, however, recommend that you use Joda-Time anyway, which offers a much clearer API.
Jon Skeet asks:
I am not the Downvoter, but here is what seems to be incorrect in that answer. You said:
However, the code:
gives the local hours, not GMT (UTC hours), using no
Calendar
and noSimpleDateFormat
at all.That is why is seems something is incorrect.
Putting together the responses, the code:
shows the GMT hours instead of the local hours -- note that
getTime.getHours()
is missing because that would create aDate()
object, which theoretically stores the date in GMT, but gives back the hours in the local time zone.This worked for me, returns the timestamp in GMT!