How to convert from java.util.date to JodaTime and get the same date

I follow this question: Convert from java.util.date to JodaTime

I have a date: Sun Jan 01 00:00:00 CET 1854 now I want to convert it to joda datetime:

DateTime dateTime = new DateTime (date);

and now, when I print this date, I got: 1853-12-31T23: 57: 44.000 + 00: 57: 44

what happened and why did my date change? How can I get the same date?

UPDATE:

I get the date using the calendar:

Calendar cal1 = Calendar.getInstance();
cal1.set(1854, 0, 1, 0, 0, 0);
cal1.getTime()

UPDATE2:

maybe there is a problem with milseconds:

    Calendar cal1 = Calendar.getInstance();
    cal1.set(1854, 0, 1, 0, 0, 0);
    DateTime start = new DateTime(1854, 1, 1, 0, 0, 0);
    System.out.println(start.getMillis());
    System.out.println(cal1.getTime().getTime());

because this code returns:

-3660598664000
-3660598799438

but I do not know why

Update3:

enter image description here

+5
source share
5 answers

ok I solve it. It's not nice, but it works, which is important

  Calendar calendar = Calendar.getInstance();
    calendar.setTime(datum);

    DateTime current = new DateTime(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1,
            calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+3
source

Joda-Time , " " (LMT) . Wikipedia:

, , .

JDK LMT, .

+6

java.util.date,

java.util.Date date = ....
DateTime dateTime = new DateTime(date.getTime());
0

Calendar cal1 = Calendar.getInstance();
    cal1.set(1854, 0, 1, 0, 0, 0);
    DateTime start = new DateTime(cal1.getTime());
    System.out.println(start);
    System.out.println(cal1.getTime());

:

1854-01-01T00:00:00.941Z
Sun Jan 01 00:00:00 GMT 1854

, - , , , . - . - . java, , .

0

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).

0
source

All Articles