In Java when I use Calendar.getInstance();
I get a Calendar
object for the current Timezone. But java.sql.Timestamp
is usually stored in UTC Time and not in local time. So how can I get the UTC Time from a Calendar instance?
DateFormat df = DateFormat.getTimeInstance();
Calendar cal = Calendar.getInstance();
Timestamp time = new Timestamp(cal.getTimeInMillis());
// Prints local time
System.out.println(df.format(new Date(time.getTime())));
// Printe local time, but I want UTT Time
System.out.println("timestamp: " + time);
Instant.now()
You are using troublesome old date-time classes now supplanted by the java.time classes. No need to be using DateFormat
, Calendar
, or Timestamp
.
If you must interopt with a Calendar
from old code not yet updated to java.time, convert using new methods added to the old classes. Extract an obsolete java.util.Date
, and convert to Instant
.
Instant instant = myCal.getTime().toInstant() ;
Get the current moment as an Instant
. The Instant
class represents a moment on the timeline in UTC with a resolution of nanoseconds (up to nine (9) digits of a decimal fraction).
Instant instant = Instant.now() ;
2017-02-17T03:29:15.725Z
With JDBC 4.2 and later, you can directly exchange a Instant
object with your database. So no need for the obsolete java.sql.Timestamp
.
myPreparedStatement.setObject( … , instant ) ;
And retrieval:
Instant instant = myResultSet.getObject( … , Instant.class ) ;
Apparently you want a number of milliseconds since the epoch reference date of 1970-01-01T00:00:00Z
. You can extract that number from an Instant
. But beware of data loss, as a Instant
has a resolution of nanoseconds which you will be truncating to milliseconds.
long millis = instant.toEpochMilli() ;
1487302155725
The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date
, Calendar
, & SimpleDateFormat
.
The Joda-Time project, now in maintenance mode, advises migration to the java.time classes.
To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310.
Where to obtain the java.time classes?
The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval
, YearWeek
, YearQuarter
, and more.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With