[ 
https://issues.apache.org/jira/browse/CALCITE-2989?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17643612#comment-17643612
 ] 

Gregory Hart commented on CALCITE-2989:
---------------------------------------

[~julianhyde], [~rubenql], and [~asolimando], thanks for your feedback! I've 
incorporated your suggestions into the merge request. I've run the tests in 
multiple timezones: UTC, America/Los_Angeles, America/New_York, 
Pacific/Chatham, Pacific/Samoa, and Pacific/Tongatapu. It's ready for your 
final review and approval.

I've also included one semi-related change which is to modify the getString() 
methods of AbstractCursor.DateAccessor, TimeAccessor, and TimestampAccessor to 
use the time zone of the localCalendar variable. This matches the behavior of 
DateFromNumberAccessor, TimeFromNumberAccessor, and 
TimestampFromNumberAccessor. It's needed for a test in the related CALCITE-5414 
ticket where I verify that ResultSet.getString(int) returns the same value as 
ResultSet.getDate(int) or ResultSet.getTimestamp(int) for certain dates or 
timestamps.

> Use ISO-8601 calendar when converting between java.sql types and unix 
> timestamps
> --------------------------------------------------------------------------------
>
>                 Key: CALCITE-2989
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2989
>             Project: Calcite
>          Issue Type: Bug
>          Components: avatica
>            Reporter: vinoyang
>            Assignee: Gregory Hart
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 50m
>  Remaining Estimate: 0h
>
> Converting java.sql types to unix timestamps requires extra steps to also 
> convert to the correct calendar. Unix timestamps should follow the proleptic 
> Gregorian calendar as defined by ISO-8601. Java uses the standard Gregorian 
> calendar for java.sql types and switches to the Julian calendar for dates 
> before the Gregorian shift.
> If we uses avatica's {{DateTimeUtils}} the dates less than 2299161 will cause 
> an error result in Flink table/sql , test code :
> {code:java}
> testAllApis(
>   "1500-04-30 12:00:00".cast(Types.SQL_TIMESTAMP),
>   "'1500-04-30 12:00:00'.cast(SQL_TIMESTAMP)",
>   "CAST('1500-04-30 12:00:00' AS TIMESTAMP)",
>   "1500-04-30 12:00:00.0")
> {code}
> result :
> {code:java}
> Expected :1500-04-30 12:00:00.0
> Actual :1500-04-20 12:00:00.0
> {code}
> another case is here : 
> https://issues.apache.org/jira/browse/FLINK-11935
> I find a key code snippet has been removed in CALCITE-1884 which caused this 
> issue :
> {code:java}
> if (j < 2299161) {
>    j = day + (153 * m + 2) / 5 + 365 * y + y / 4 - 32083;
> }
> {code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to