Skip to content

Commit bb5b586

Browse files
igormunkinblinkov
andauthored
[docs] Update docs for impossible TzDate casts (#5866)
Co-authored-by: Ivan Blinkov <[email protected]>
1 parent f998931 commit bb5b586

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

ydb/docs/en/core/yql/reference/yql-core/udf/list/datetime.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,23 @@ select
460460
DateTime::Format("%Y-%m-%d %Z")(AddTimezone($x, "Europe/Moscow")), -- 2019-10-22 Europe/Moscow
461461
```
462462

463+
It's worth mentioning that several `TzDatetime` or `TzTimestamp` values with a positive timezone offset cannot be cast to `TzDate`. Consider the example below:
464+
465+
```yql
466+
SELECT CAST(TzDatetime("1970-01-01T23:59:59,Europe/Moscow") as TzDate);
467+
/* Fatal: Timestamp 1970-01-01T23:59:59.000000,Europe/Moscow cannot be casted to TzDate */
468+
```
469+
470+
Starting from the Unix epoch, there is no valid value representing midnight on 01/01/1970 for the Europe/Moscow timezone. As a result, such a cast is impossible and fails at runtime.
471+
472+
At the same time, values with a negative timezone offset are converted correctly:
473+
474+
```yql
475+
SELECT CAST(TzDatetime("1970-01-01T23:59:59,America/Los_Angeles") as TzDate);
476+
/* 1970-01-01,America/Los_Angeles */
477+
478+
```
479+
463480
**Daylight saving time**
464481

465482
Please note that daylight saving time depends on the year:

ydb/docs/ru/core/yql/reference/yql-core/udf/list/datetime.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,23 @@ select
464464
DateTime::Format("%Y-%m-%d %Z")(AddTimezone($x, "Europe/Moscow")), -- 2019-10-22 Europe/Moscow
465465
```
466466

467+
Стоит отметить, что некоторые значения в типaх TzDatetime и TzTimestamp, имеющие положительное смещение таймзоны, не могут быть преобразованы в тип TzDate. Рассмотрим следующий пример:
468+
469+
```yql
470+
SELECT CAST(TzDatetime("1970-01-01T23:59:59,Europe/Moscow") as TzDate);
471+
/* Fatal: Timestamp 1970-01-01T23:59:59.000000,Europe/Moscow cannot be casted to TzDate */
472+
```
473+
474+
Не существует такого значения, начиная с Unix epoch, которым можно представить полночь 01.01.1970 для московского времени. В результате, такое преобразование считается невозможным и генерирует ошибку времени выполнения.
475+
476+
В то же время, значения, имеющие отрицательное смещение таймзоны, возвращают корректный результат:
477+
478+
```yql
479+
SELECT CAST(TzDatetime("1970-01-01T23:59:59,America/Los_Angeles") as TzDate);
480+
/* 1970-01-01,America/Los_Angeles */
481+
482+
```
483+
467484
**Летнее время**
468485

469486
Обратите внимание, что летнее время зависит от года:

0 commit comments

Comments
 (0)