>>> spark.conf.set("spark.sql.session.timeZone", "Asia/Shanghai")
>>> spark.sql("SELECT CAST(TIMESTAMP '1970-01-01 00:00:00' AS LONG)").show()
+-----------------------------------------------+
|CAST(TIMESTAMP '1970-01-01 00:00:00' AS BIGINT)|
+-----------------------------------------------+
|                                         -28800|
+-----------------------------------------------+

>>> spark.sql("SELECT CAST(TIMESTAMP('1970-01-01 00:00:00') AS LONG)").show()
+-----------------------------------+
|CAST(1970-01-01 00:00:00 AS BIGINT)|
+-----------------------------------+
|                             -28800|
+-----------------------------------+

>>> spark.sql("SELECT CAST(BIGINT(-28800) AS TIMESTAMP) AS t").show()
+-------------------+
|                  t|
+-------------------+
|1970-01-01 00:00:00|
+-------------------+

>>> spark.sql("SELECT CAST(TIMESTAMP '1970-01-01 00:00:00+00:00' AS LONG)").show()
+-----------------------------------------------+
|CAST(TIMESTAMP '1970-01-01 08:00:00' AS BIGINT)|
+-----------------------------------------------+
|                                              0|
+-----------------------------------------------+

>>> spark.sql("SELECT CAST(TIMESTAMP('1970-01-01 00:00:00+00:00') AS LONG)").show()
+-----------------------------------------+
|CAST(1970-01-01 00:00:00+00:00 AS BIGINT)|
+-----------------------------------------+
|                                        0|
+-----------------------------------------+

>>> spark.sql("SELECT CAST(BIGINT(0) AS TIMESTAMP) AS t").show()
+-------------------+
|                  t|
+-------------------+
|1970-01-01 08:00:00|
+-------------------+

>>> spark.conf.set("spark.sql.session.timeZone", "America/Los_Angeles")
>>> spark.sql("SELECT CAST(TIMESTAMP '1970-01-01 00:00:00' AS LONG)").show()
+-----------------------------------------------+
|CAST(TIMESTAMP '1970-01-01 00:00:00' AS BIGINT)|
+-----------------------------------------------+
|                                          28800|
+-----------------------------------------------+

>>> spark.sql("SELECT CAST(BIGINT(28800) AS TIMESTAMP) AS t").show()
+-------------------+
|                  t|
+-------------------+
|1970-01-01 00:00:00|
+-------------------+

>>> spark.sql("SELECT CAST(TIMESTAMP '1970-01-01 00:00:00+00:00' AS LONG)").show()
+-----------------------------------------------+
|CAST(TIMESTAMP '1969-12-31 16:00:00' AS BIGINT)|
+-----------------------------------------------+
|                                              0|
+-----------------------------------------------+

>>> spark.sql("SELECT CAST(BIGINT(0) AS TIMESTAMP) AS t").show()
+-------------------+
|                  t|
+-------------------+
|1969-12-31 16:00:00|
+-------------------+

>>> spark.sql("SELECT CAST(TIMESTAMP '1970-01-01 00:00:00+08:00' AS LONG)").show()
+-----------------------------------------------+
|CAST(TIMESTAMP '1969-12-31 08:00:00' AS BIGINT)|
+-----------------------------------------------+
|                                         -28800|
+-----------------------------------------------+

>>> spark.sql("SELECT CAST(BIGINT(-28800) AS TIMESTAMP) AS t").show()
+-------------------+
|                  t|
+-------------------+
|1969-12-31 08:00:00|
+-------------------+

>>> spark.sql("SELECT CAST(TIMESTAMP '2024-11-03 01:30:00' AS LONG)").show()
+-----------------------------------------------+
|CAST(TIMESTAMP '2024-11-03 01:30:00' AS BIGINT)|
+-----------------------------------------------+
|                                     1730622600|
+-----------------------------------------------+

>>> spark.sql("SELECT CAST(BIGINT(1730622600) AS TIMESTAMP) AS t").show()
+-------------------+
|                  t|
+-------------------+
|2024-11-03 01:30:00|
+-------------------+

>>> spark.sql("SELECT CAST(TIMESTAMP '2024-11-03 02:30:00' AS LONG)").show()
+-----------------------------------------------+
|CAST(TIMESTAMP '2024-11-03 02:30:00' AS BIGINT)|
+-----------------------------------------------+
|                                     1730629800|
+-----------------------------------------------+

>>> spark.sql("SELECT CAST(BIGINT(1730629800) AS TIMESTAMP) AS t").show()
+-------------------+
|                  t|
+-------------------+
|2024-11-03 02:30:00|
+-------------------+

>>> spark.sql("SELECT CAST(TIMESTAMP '2025-03-09 01:30:00' AS LONG)").show()
+-----------------------------------------------+
|CAST(TIMESTAMP '2025-03-09 01:30:00' AS BIGINT)|
+-----------------------------------------------+
|                                     1741512600|
+-----------------------------------------------+

>>> spark.sql("SELECT CAST(BIGINT(1741512600) AS TIMESTAMP) AS t").show()
+-------------------+
|                  t|
+-------------------+
|2025-03-09 01:30:00|
+-------------------+

>>> spark.sql("SELECT CAST(TIMESTAMP '2025-03-09 02:30:00' AS LONG)").show()
+-----------------------------------------------+
|CAST(TIMESTAMP '2025-03-09 03:30:00' AS BIGINT)|
+-----------------------------------------------+
|                                     1741516200|
+-----------------------------------------------+

>>> spark.sql("SELECT CAST(BIGINT(1741516200) AS TIMESTAMP) AS t").show()
+-------------------+
|                  t|
+-------------------+
|2025-03-09 03:30:00|
+-------------------+

>>> spark.sql("SELECT CAST(TIMESTAMP '2025-03-09 03:30:00' AS LONG)").show()
+-----------------------------------------------+
|CAST(TIMESTAMP '2025-03-09 03:30:00' AS BIGINT)|
+-----------------------------------------------+
|                                     1741516200|
+-----------------------------------------------+

>>> spark.sql("SELECT TIMESTAMP '2024-11-03 02:30:00' - TIMESTAMP '2024-11-03 01:30:00'").show(truncate=False)  # doctest: +SKIP
+-------------------------------------------------------------------+
|(TIMESTAMP '2024-11-03 02:30:00' - TIMESTAMP '2024-11-03 01:30:00')|
+-------------------------------------------------------------------+
|INTERVAL '0 01:00:00' DAY TO SECOND                                |
+-------------------------------------------------------------------+

>>> spark.sql("SELECT TIMESTAMP '2025-03-09 03:30:00' - TIMESTAMP '2025-03-09 02:30:00'").show(truncate=False)  # doctest: +SKIP
+-------------------------------------------------------------------+
|(TIMESTAMP '2025-03-09 03:30:00' - TIMESTAMP '2025-03-09 03:30:00')|
+-------------------------------------------------------------------+
|INTERVAL '0 00:00:00' DAY TO SECOND                                |
+-------------------------------------------------------------------+

>>> spark.sql("SELECT TIMESTAMP '2024-11-03 01:30:00' + INTERVAL 1 HOUR").show(truncate=False)  # doctest: +SKIP
+----------------------------------------------------+
|TIMESTAMP '2024-11-03 01:30:00' + INTERVAL '01' HOUR|
+----------------------------------------------------+
|2024-11-03 01:30:00                                 |
+----------------------------------------------------+

>>> spark.sql("SELECT TIMESTAMP '2024-11-03 01:30:00' + INTERVAL 2 HOUR").show(truncate=False)  # doctest: +SKIP
+----------------------------------------------------+
|TIMESTAMP '2024-11-03 01:30:00' + INTERVAL '02' HOUR|
+----------------------------------------------------+
|2024-11-03 02:30:00                                 |
+----------------------------------------------------+
