Skip to content

Commit d608305

Browse files
wt0530githubgxll
authored andcommitted
[fix][runtime] Fixed timezone issue when converting timestamp to time
1 parent 43f19cd commit d608305

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

runtime/src/main/java/io/dingodb/expr/runtime/op/cast/TimeCastOpFactory.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
import java.sql.Time;
2727
import java.sql.Timestamp;
2828
import java.time.Instant;
29+
import java.time.LocalDateTime;
2930
import java.time.ZoneId;
31+
import java.time.ZoneOffset;
3032
import java.time.ZonedDateTime;
3133
import java.util.Calendar;
3234
import java.util.HashMap;
@@ -143,14 +145,9 @@ protected Time evalNonNullValue(@NonNull Object value, ExprConfig config) {
143145
} else if (value instanceof Long) {
144146
return timeCast((Long) value);
145147
} else if (value instanceof Timestamp) {
146-
Calendar calendar = Calendar.getInstance();
147-
calendar.setTimeInMillis(((Timestamp) value).getTime());
148-
149-
int hour = calendar.get(Calendar.HOUR_OF_DAY);
150-
int minute = calendar.get(Calendar.MINUTE);
151-
int second = calendar.get(Calendar.SECOND);
152-
153-
return new Time(hour, minute, second);
148+
LocalDateTime t = ((Timestamp) value).toLocalDateTime();
149+
ZonedDateTime zonedDateTime = ZonedDateTime.of(t, ZoneOffset.UTC);
150+
return new Time(zonedDateTime.toLocalDateTime().toInstant(ZoneOffset.UTC).toEpochMilli());
154151
} else {
155152
return null;
156153
}

0 commit comments

Comments
 (0)