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.