andygrove opened a new issue, #6331:
URL: https://github.com/apache/datafusion-comet/issues/6331

   ### Describe the bug
   
   Spark converts between instants and local time using the JVM's timezone 
rules (`tzdb.dat`), whose version depends on the JDK build and on whether 
TZUpdater has been run. Comet's native kernels use chrono-tz instead, which 
compiles its own copy of the IANA database into libcomet. chrono-tz 0.10.4 
carries 2025b. When the two versions disagree about a zone, every local-time 
operation on the affected timestamps gives a different answer, and nothing 
reports it. That covers `hour`, casts to string and date, `date_trunc`, parsing 
strings into timestamps, and date-to-timestamp casts.
   
   The drift can go either way. A JDK older than 2025b disagrees with Comet 
about recent rule changes. A JDK newer than 2025b will disagree about whatever 
changes after it, until we upgrade chrono-tz.
   
   ### Steps to reproduce
   
   With AppleJDK 17.0.10, which ships tzdata 2023c, on `main` at `764936187`:
   
   ```sql
   CREATE TABLE py USING parquet AS SELECT * FROM VALUES 
(TIMESTAMP'2025-06-15T12:00:00Z') AS v(ts);
   CREATE TABLE kz USING parquet AS SELECT * FROM VALUES 
(TIMESTAMP'2024-06-30T23:30:00Z') AS v(ts);
   
   SET spark.sql.session.timeZone=America/Asuncion;
   SELECT hour(ts), CAST(ts AS STRING) FROM py;
   
   SET spark.sql.session.timeZone=Asia/Almaty;
   SELECT hour(ts), CAST(ts AS STRING) FROM kz;
   ```
   
   For Asuncion, Spark returns `8, 2025-06-15 08:00:00` and Comet returns `9, 
2025-06-15 09:00:00`. For Almaty, Spark returns `5, 2024-07-01 05:30:00` and 
Comet returns `4, 2024-07-01 04:30:00`. Paraguay moved to permanent UTC-3 
(tzdata 2025a), and Kazakhstan unified on UTC+5 on 2024-03-01 (tzdata 2024a). 
2023c has neither change.
   
   ### Expected behavior
   
   The same local times as Spark. Failing that, a documented limitation and a 
warning when the two versions differ.
   
   ### Additional context
   
   We could expose `chrono_tz::IANA_TZDB_VERSION` over JNI and log a warning at 
startup when it differs from the JVM's version 
(`ZoneRulesProvider.getVersions("UTC").lastKey()`). We could also document the 
drift next to the existing chrono-tz horizon note in the datetime compatibility 
guide, and keep chrono-tz current. #4754 is related, though jiff reading the 
system tz database wouldn't match the JVM's bundled copy either.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to