[External] : Re: RFR: 8231640: (prop) Canonical property storage

Stuart Marks stuart.marks at oracle.com
Wed Sep 8 19:05:50 UTC 2021

>> Unless there's an overriding reason, it might be nice to have the output format 
>> match the format used in the Debian patch that adds SOURCE_DATE_EPOCH:
>> https://salsa.debian.org/openjdk-team/openjdk/-/blob/master/debian/patches/reproducible-properties-timestamp.diff 
> So the current patch implementation uses the format "d MMM yyyy HH:mm:ss 'GMT'", 
> with a Locale.ROOT (for locale neutral formatting). I chose this format since that 
> was the one that the (deprecated) java.util.Date#toGMTString() was using.
> Roger's suggestion is to use DateTimeFormatter#RFC_1123_DATE_TIME date format which 
> is "dow, d MMM yyyy HH:mm:ss GMT" (where dow == day of week)
> IMO, either of these formats are "well known", since they are/were used within the 
> JDK, especially the DateTimeFormatter#RFC_1123_DATE_TIME which Roger suggested, 
> since that's even a public spec.
> The one in the debian patch is "yyyy-MM-dd HH:mm:ss z" which although is fine to 
> use, it however feels a bit "less known".
> I was leaning towards Roger's suggestion to use the RFC_1123_DATE_TIME in my 
> upcoming patch update. Is there a reason why the one in debian's patch is preferable 
> compared to a spec backed format?

My point in bringing this is up is to consider interoperability. I don't have a 
strong preference over the particular date format. As far as I can see, there are 
currently two behaviors "in the wild":

1) Baseline OpenJDK 17 behavior:

     dow mon dd hh:mm:ss zzz yyyy

This is the behavior provided by "new Date().toString()" and has likely not changed 
in many years. Of course, the actual values reflect the current time and locale, 
which hurts reproducibility, but the format itself hasn't changed.

2) Debian's OpenJDK with SOURCE_DATE_EPOCH set:

     yyyy-MM-dd HH:mm:ss z

The question is, what format should the JDK-8231640 use?

I had said earlier that it might be a good idea to match the Debian format. But 
thinking about this further, I think sticking with the original JDK format would be 
preferable. The Debian change is after all an outlier.

So the more specific question is, should we try to continue with the original JDK 
format or choose a format that's "better" in some sense? It seems to me that if 
there's something out there that parses the date from a properties file, we'd want 
to avoid breaking this code if the environment variable is set. So maybe stick with 
the original format in all cases. But of course for reproducibility use the epoch 
value from the environment and set the locale and zone offset to known values.


More information about the core-libs-dev mailing list