I am trying to produce a Date
object (java.util.Date
) from a LocalDate
object (java.time.LocalDate
) in which I have the following criteria:
- Allow a parameter that can subtract a certain number of days from the
Date
object - Have the Date & Time be the date and time currently in UTC
- Have the time at the beginning of the day i.e.
00:00:00
- The Timezone stamp (i.e. CDT or UTC) is irrelevant as I remove that from the
String
To meet this criteria, I have created a test program, however I am getting interesting results when I modify a certain property of the LocalDate
. See code below:
public static void main (String args[]) {
Long processingDaysInPast = 0L;
LocalDate createdDate1 = LocalDate.now(Clock.systemUTC()).minusDays(processingDaysInPast);
LocalDate createdDate2 = LocalDate.now(Clock.systemUTC()).minusDays(processingDaysInPast);
System.out.println(createdDate1);
System.out.println(createdDate1.atStartOfDay().toInstant(ZoneOffset.UTC));
System.out.println(Date.from(createdDate1.atStartOfDay().toInstant(ZoneOffset.UTC)));
System.out.println((createdDate2.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()));
System.out.println(Date.from(createdDate2.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()));
}
Output:
2017-08-14
2017-08-14T00:00:00Z
Sun Aug 13 19:00:00 CDT 2017
2017-08-14
2017-08-14T05:00:00Z
Mon Aug 14 00:00:00 CDT 2017
When I add the value Date.from(createdDate1.atStartOfDay().toInstant(ZoneOffset.UTC))
I get the expected output of the date, with a 00:00:00
time field. However, if I do not add this parameter, such as: Date.from(createdDate2.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant())
I get the resulting day before , at 19:00:00
why is this?
My main goal from this is to be able to capture a Date
object, with the current UTC Date, and the Time zeroed out (StartOfDay
).