Reproduces on master.

```
SELECT toDateTime64('2021-03-22', 3, 'Asia/Tehran')

Query id: 26f7c373-f473-4209-8976-6ada79a8627f

┌─toDateTime64('2021-03-22', 3, 'Asia/Tehran')─┐
│                      2157-04-28 06:28:16.000 │
└──────────────────────────────────────────────┘
```
{
        return lut[findIndex(t) + days].date;
    }
    inline Time toTime(Time t) const
    {
        const LUTIndex index = findIndex(t);
        Time res = t - lut[index].date;
        if (res >= lut[index].time_at_offset_change())
            res += lut[index].amount_of_offset_change();
        return res - offset_at_start_of_epoch; 
    }
    inline unsigned toHour(Time t) const
    {
        const LUTIndex index = findIndex(t);
        Time time = t - lut[index].date;
        if (time >= lut[index].time_at_offset_change())
            time += lut[index].amount_of_offset_change();
        unsigned res = time / 3600;
        
        return res <= 23 ? res : 23;
    }
    /** Calculating offset from UTC in seconds.
      * which means Using the same literal time of "t" to get the corresponding timestamp in UTC,
      * then subtract the former from the latter to get the offset result.
      * The boundaries when meets DST(daylight saving time) change should be handled very carefully.
      */
    inline Time timezoneOffset(Time t) const