tl;dr
These all represent the very same point on the timeline, the very same simultaneous moment:
- 2017-12-06T23:00:00.000+0000
- 2017-12-07T00:00:00.000+01:00
- 2017-12-07T04:30:00.000+05:30
Details
The Europe/Warsaw
time zone is currently one hour ahead of UTC.
"2017-12-06T23:00:00.000+0000"
Your string represents a moment in UTC. Note the +0000
, an abbreviation of +00:00
, which means an offset of zero hours and zero minutes from UTC. So it is at UTC.
That same moment as seen thorough the lens of a clock on the wall on Poland is 00:00 on the morning of the next date. That is the first moment of the new day in Poland.
"2017-12-07T00:00:00.000+01:00"
That same moment is later on a wall-clock in India where the people live five and a half hours ahead of UTC.
"2017-12-07T04:30:00.000+05:30"
If an insomniac in Poland called their friend on the west coast of North America, they might catch their friend still on the job in mid-afternoon at 3 PM on the earlier date. There the clock on the wall is eight hours behind UTC.
"2017-12-06T15:00:00.000-08:00"
Parse your input string as an OffsetDateTime
object. To view the same moment in other time zones, adding a ZoneId
to get a ZonedDateTime
. Search Stack Overflow for details as this has been covered many many times already.
Avoid the troublesome flawed old date-time classes such as Date
. Use only their replacements, the modern industry-leading java.time classes.