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

xiaogang zhou commented on FLINK-19757:
---------------------------------------

[~jark] the ideal that TimestampData and LocalDataTime does not contains the 
zone offset is right, but when convert the

currentTimeMillis or the Timestamp to LocalDataTime, we should consider the 
timezone issue.

the jdk code suggest so
{code:java}
// code placeholder
// code placeholder


public static LocalDateTime ofEpochSecond(long epochSecond, int nanoOfSecond, 
ZoneOffset offset) {
    Objects.requireNonNull(offset, "offset");
    NANO_OF_SECOND.checkValidValue(nanoOfSecond);
    long localSecond = epochSecond + offset.getTotalSeconds();  // overflow 
caught later
    long localEpochDay = Math.floorDiv(localSecond, SECONDS_PER_DAY);
    int secsOfDay = (int)Math.floorMod(localSecond, SECONDS_PER_DAY);
    LocalDate date = LocalDate.ofEpochDay(localEpochDay);
    LocalTime time = LocalTime.ofNanoOfDay(secsOfDay * NANOS_PER_SECOND + 
nanoOfSecond);
    return new LocalDateTime(date, time);
}
{code}

> TimeStampData can cause time inconsistent problem
> -------------------------------------------------
>
>                 Key: FLINK-19757
>                 URL: https://issues.apache.org/jira/browse/FLINK-19757
>             Project: Flink
>          Issue Type: Improvement
>          Components: Table SQL / Runtime
>    Affects Versions: 1.11.1
>            Reporter: xiaogang zhou
>            Priority: Major
>              Labels: pull-request-available
>
> when we check jdk LocalDateTime code,we find that
>  
> {code:java}
> // code placeholder
> public static LocalDateTime ofEpochSecond(long epochSecond, int nanoOfSecond, 
> ZoneOffset offset) {
>     Objects.requireNonNull(offset, "offset");
>     NANO_OF_SECOND.checkValidValue(nanoOfSecond);
>     long localSecond = epochSecond + offset.getTotalSeconds();  // overflow 
> caught later
>     long localEpochDay = Math.floorDiv(localSecond, SECONDS_PER_DAY);
>     int secsOfDay = (int)Math.floorMod(localSecond, SECONDS_PER_DAY);
>     LocalDate date = LocalDate.ofEpochDay(localEpochDay);
>     LocalTime time = LocalTime.ofNanoOfDay(secsOfDay * NANOS_PER_SECOND + 
> nanoOfSecond);
>     return new LocalDateTime(date, time);
> }
> {code}
>  
> offset.getTotalSeconds() they add the offset, but in the TimeStampData
> toLocalDateTime, we don't add a offset.
>  
> I'd like to add a TimeZone.getDefault().getRawOffset() in the 
> toLocalDateTime()
> and minus a TimeZone.getDefault().getRawOffset() in the 
> fromLocalDateTime



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to