Trong PostgreSQL, Định dạng của dấu thời gian độc lập với bộ nhớ. Một câu trả lời là sử dụng to_char
và định dạng dấu thời gian để bất cứ định dạng bạn cần tại thời điểm bạn cần đến nó, như thế này:
select to_char(current_timestamp, 'yyyy-MM-dd HH24:MI:SS.MS');
select to_timestamp('2012-10-11 12:13:14.123',
'yyyy-MM-dd HH24:MI:SS.MS')::timestamp;
Nhưng nếu bạn phải thiết lập các định dạng mặc định:
Thay đổi postgresql timestamp định dạng toàn cầu:
Hãy xem múi giờ của bạn, chạy như một truy vấn sql:
show timezone
Result: "US/Eastern"
Vì vậy, khi bạn đang in ra current_timestamp, bạn thấy điều này:
select current_timestamp
Result: 2012-10-23 20:58:35.422282-04
Các -04
ở cuối là múi giờ của bạn so với UTC.Bạn có thể thay đổi múi giờ của bạn với:
set timezone = 'US/Pacific'
Sau đó:
select current_timestamp
Result: 2012-10-23 18:00:38.773296-07
Vì vậy, chú ý đến -07
có, có nghĩa là chúng ta Thái Bình Dương là 7 giờ xa UTC. Làm thế nào để làm cho múi giờ khó coi đó biến mất? Một cách chỉ là làm cho một bảng, nó mặc định là một dấu thời gian mà không cần múi giờ:
CREATE TABLE worse_than_fail_table
(
mykey INT unique not null,
fail_date TIMESTAMP not null
);
Sau đó, nếu bạn thêm một dấu thời gian để bảng đó và chọn từ nó
select fail_date from worse_than_fail_table
Result: 2012-10-23 21:09:39.335146
yay, không có múi giờ trên kết thúc. Nhưng bạn muốn kiểm soát nhiều hơn cách dấu thời gian hiển thị theo mặc định! Bạn có thể làm một cái gì đó như thế này:
CREATE TABLE moo (
key int PRIMARY KEY,
boo text NOT NULL DEFAULT TO_CHAR(CURRENT_TIMESTAMP,'YYYYMM')
);
Đó là một trường văn bản mà cung cấp cho bạn kiểm soát nhiều hơn như thế nào nó xuất hiện theo mặc định khi bạn làm một select somecolumns from sometable
. Chú ý là bạn có thể bỏ một chuỗi để đánh dấu thời gian:
select '2012-10-11 12:13:14.56789'::timestamp
Result: 2012-10-11 12:13:14.56789
Bạn có thể cast một current_timestamp để timestamp
mà loại bỏ các múi giờ:
select current_timestamp::timestamp
Result: 2012-10-23 21:18:05.107047
Bạn có thể thoát khỏi múi giờ như thế này:
select current_timestamp at time zone 'UTC'
Result: "2012-10-24 01:40:10.543251"
Nhưng nếu bạn thực sự muốn múi giờ trở lại, bạn có thể làm điều này:
select current_timestamp::timestamp with time zone
Result: 2012-10-23 21:20:21.256478-04
Bạn có thể yank ra những gì bạn muốn với chiết xuất:
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 20
Và con quái vật này:
SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'EST';
Result: 2001-02-16 20:38:40
mà khách hàng ứng dụng bạn đang sử dụng? –
nguyên mẫu trong php, chuyển sang node.js trong khoảng 6 mo –
Sau đó, đây sẽ là cài đặt php để thay đổi, không phải là cài đặt Postgres. –