public ZonedDateTime atStartOfDay (ZoneId zone)

Returns a zoned date-time from this date at the earliest valid time according to the rules in the time-zone.

Time-zone rules, such as daylight savings, mean that not every local date-time is valid for the specified zone, thus the local date-time may not be midnight.

In most cases, there is only one valid offset for a local date-time. In the case of an overlap, there are two valid offsets, and the earlier one is used, corresponding to the first occurrence of midnight on the date. In the case of a gap, the zoned date-time will represent the instant just after the gap.

If the zone ID is a ZoneOffset, then the result always has a time of midnight.

To convert to a specific time in a given time-zone call atTime(LocalTime) followed by LocalDateTime.atZone(ZoneId).

Parameters:
zone    the zone ID to use, not null

Returns:  the zoned date-time formed from this date and the earliest valid time for the zone, not null