簡體   English   中英

PostgreSQL將帶時區的日期轉換為時間戳

[英]PostgreSQL convert date with timezone to a timestamp

我的日期已以DD/MM/YYYY HH24:MI TZ (帶時區的日期時間)格式存儲在我的psql數據庫中。 我需要將此日期轉換為時間戳。

我嘗試了to_timestamp(),但它不能與時區一起使用。

ERROR:  "TZ"/"tz"/"OF" format patterns are not supported in to_date

我嘗試了:: timestamptz,但它認為日期的格式為MM/DD/YYYY HH24:MI TZ

ERROR:  date/time field value out of range

有什么方法可以將格式從DD/MM/YYYY HH24:MI TZMM/DD/YYYY HH24:MI TZ或將DD/MM/YYYY HH24:MI TZ為時間戳?

例如“ 28/04/2017 13:00 +2:30”

嘗試直接投放嗎?

so=# select to_timestamp('04/28/2017 13:00 +2:30','D/MM/YYYY HH24:MI TZ');
ERROR:  "TZ"/"tz"/"OF" format patterns are not supported in to_date
Time: 20.850 ms
so=# select '04/28/2017 13:00 +2:30'::timestamptz;
      timestamptz
------------------------
 2017-04-28 10:30:00+00
(1 row)

Time: 0.554 ms

https://www.postgresql.org/docs/current/static/functions-formatting.html

存在to_timestamp和to_date來處理無法通過簡單轉換進行轉換的輸入格式。 對於大多數標准日期/時間格式,只需將源字符串強制轉換為所需的數據類型即可,並且非常容易。

更新

關於您的評論,您只需要調整datestyle即可更改解析:

so=# set datestyle to DMY;
SET
Time: 9.997 ms
so=# select '04/28/2017 13:00 +2:30'::timestamptz;
ERROR:  date/time field value out of range: "04/28/2017 13:00 +2:30"
LINE 1: select '04/28/2017 13:00 +2:30'::timestamptz;
               ^
HINT:  Perhaps you need a different "datestyle" setting.
Time: 10.217 ms
so=# set datestyle to MDY;
SET
Time: 8.799 ms
so=# select '04/28/2017 13:00 +2:30'::timestamptz;
      timestamptz
------------------------
 2017-04-28 10:30:00+00
(1 row)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM