JodaStephen .
Joda-Time java.time, Java 8 . java.time .
, CET offset-from-UTC, . UTC CET.
java.time
CET UTC. offset-from-UTC, full , OffsetDateTime +01:00.
LocalDateTime localDateTime = LocalDateTime.of ( 1854 , 1 , 1 , 0 , 0 , 0 , 0 ); // The nineteenth century.
ZoneOffset offset = ZoneOffset.of ( "+01:00" ); // "CET" means one hour ahead of UTC.
OffsetDateTime odt = OffsetDateTime.of ( localDateTime , offset );
Instant instant = odt.toInstant (); // A moment on the timeline in UTC, with resolution in nanoseconds.
long m = instant.toEpochMilli ();
System.out.println ( "odt: " + odt + " | millis: " + m );
odt: 1854-01-01T00: 00 + 01: 00 | : -3660598800000
Joda
, Joda-Time 2.9.3.
DateTimeZone zone = DateTimeZone.forOffsetHoursMinutes ( 1 , 0 );
DateTime dateTime = new DateTime ( 1854 , 1 , 1 , 0 , 0 , zone );
long millis = dateTime.getMillis ();
System.out.println ( "dateTime: " + dateTime + " | millis: " + millis );
dateTime: 1854-01-01T00: 00: 00.000 + 01: 00 | : -3660598800000
, java.time.
java.util.Calendar
. java.util.Date/.Calendar, , .
Calendar calendar = Calendar.getInstance ();
calendar.set ( 1854 , 0 , 1 , 0 , 0 , 0 );
TimeZone zone = TimeZone.getTimeZone ( "GMT+01:00" );
calendar.setTimeZone ( zone );
long millis = calendar.getTimeInMillis ();
System.out.println ( "calendar: " + calendar + " | millis: " + millis );
calendar: java.util.GregorianCalendar [time = -3660598799715, areFieldsSet = true, areAllFieldsSet = false, lenient = true, zone = sun.util.calendar.ZoneInfo [id = "GMT + 01: 00", offset = 3600000, dstSavings = 0, useDaylight = , = 0, lastRule = NULL], firstDayOfWeek = 1, minimalDaysInFirstWeek = 1, = 1, = 1854, = 0, WEEK_OF_YEAR = 1, WEEK_OF_MONTH = 1, DAY_OF_MONTH = 1, DAY_OF_YEAR = 1, DAY_OF_WEEK = 1, DAY_OF_WEEK_IN_MONTH = 1, AM_PM = 0, HOUR = 0, HOUR_OF_DAY = 0, MINUTE = 0, SECOND = 0, MILLISECOND = 285, ZONE_OFFSET = 3600000, DST_OFFSET = 0] | : -3660598799715
. -3660598799715 -3660598800000 java.time Joda-Time, 285.
Europe/Brussels
Europe/Brussels, UTC.
java.time. ZonedDateTime, OffsetDateTime.
LocalDateTime localDateTime = LocalDateTime.of ( 1854 , 1 , 1 , 0 , 0 , 0 , 0 ); // The nineteenth century.
ZoneId zoneId = ZoneId.of ( "Europe/Brussels" );
ZonedDateTime zdt = ZonedDateTime.of ( localDateTime , zoneId );
Instant instant = zdt.toInstant (); // A moment on the timeline in UTC, with resolution in nanoseconds.
long m = instant.toEpochMilli ();
System.out.println ( "zdt: " + zdt + " | millis: " + m );
zdt: 1854-01-01T00: 00 + 00: 17: 30 [/] | : -3660596250000
-. .
DateTimeZone zone = DateTimeZone.forID ( "Europe/Brussels" );
dateTime: 1854-01-01T00: 00: 00.000 + 00: 17: 30 | : -3660596250000
java.util.Calendar. , TimeZone:
TimeZone zone = TimeZone.getTimeZone ( "Europe/Brussels" );
calendar: java.util.GregorianCalendar [time = -3660598799151, areFieldsSet = true, areAllFieldsSet = false, lenient = true, zone = sun.util.calendar.ZoneInfo [id = "Europe/Brussels", offset = 3600000, dstSavings = 3600000, useDaylight = , = 184, lastRule = java.util.SimpleTimeZone [ID = /, = 3600000, dstSavings = 3600000, useDaylight = , StartYear = 0, StartMode = 2, StartMonth = 2, startDay = -1, startDayOfWeek = 1, = 3600000 , startTimeMode = 2, endMode = 2, endMonth = 9, endDay = -1, endDayOfWeek = 1, EndTime = 3600000, endTimeMode = 2]], firstDayOfWeek = 1, minimalDaysInFirstWeek = 1, = 1, = 1854, = 0, WEEK_OF_YEAR = 1, WEEK_OF_MONTH = 1, DAY_OF_MONTH = 1, day_of_year = 1, DAY_OF_WEEK = 1, DAY_OF_WEEK_IN_MONTH = 1, AM_PM = 0, = 0, HOUR_OF_DAY = 0, MINUTE = 0, SECOND = 0, MILLISECOND = 849, ZONE_OFFSET = 3600000, DST_OFFSET = 0] | : -3660598799151
All three using Europe/Brusselsdifferent from their version offset +01:00.
Again, java.time and Joda-Time are consistent with each other ( -3660596250000), differing from Calendar( -3660598799151) by the difference 2,549,151(about 42 and a half minutes).