Vâng. Có trường hợp sử dụng cho TIMESTAMP WITHOUT TIME ZONE
.
- Trong các ứng dụng kinh doanh phổ biến, loại này sẽ chỉ được sử dụng cho:
- Đặt lịch hẹn trong tương lai
- Đại diện cho cùng một thời gian trong ngày trên các múi giờ khác nhau, chẳng hạn như buổi trưa ngày 23 ở Tokyo và ở Paris (hai thời điểm khác nhau cách nhau hàng giờ, cùng thời gian trong ngày)
- Để theo dõi khoảnh khắc, các điểm cụ thể trên dòng thời gian, luôn luôn sử dụng
TIMESTAMP WITH TIME ZONE
, không WITHOUT
.
TIMESTAMP WITHOUT TIME ZONE
các giá trị không phải là một điểm trên dòng thời gian, không phải là khoảnh khắc thực tế. Chúng đại diện cho một ý tưởng sơ bộ về những khoảnh khắc tiềm năng , những điểm có thể có trên dòng thời gian dọc theo khoảng 26-27 giờ (phạm vi múi giờ trên toàn cầu). Chúng không có ý nghĩa thực sự cho đến khi bạn áp dụng múi giờ hoặc bù từ UTC .
Vd: Giáng sinh
Ví dụ, giả sử bạn cần ghi lại ngày bắt đầu của ngày lễ / ngày thánh.
Table: holiday_
Column: year_ Type: SMALLINT
Column: description_ Type: VARCHAR
Column: start_ Type: TIMESTAMP WITHOUT TIME ZONE
Để ghi lại thực tế rằng Giáng sinh bắt đầu sau nửa đêm ngày 25 tháng 12 năm nay, chúng ta cần nói 2016-12-25 00:00:00
mà không có bất kỳ múi giờ nào. Đầu ngày ông già Noel, ông đến thăm Auckland New Zealand chỉ sau nửa đêm, vì đó là một trong những đêm sớm nhất trên toàn cầu. Sau đó, anh ta đi về phía tây, khi nửa đêm tiếp theo xảy ra, sớm đến Philippines. Sau đó, tuần lộc di chuyển theo hướng tây, đến Ấn Độ vào lúc nửa đêm, điều này xảy ra vài giờ sau nửa đêm Auckland. Nhiều sau đó vẫn là nửa đêm ở Paris FR, và vẫn là nửa đêm ở Montreal CA. Tất cả những chuyến viếng thăm này của ông già Noel diễn ra vào những thời điểm khác nhau là thời gian , nhưng tất cả đều diễn ra ngay sau nửa đêm, mỗi nửa đêm của mỗi địa phương.
Vì vậy, ghi âm 2016-12-25 00:00:00
mà không có bất kỳ múi giờ nào khi bắt đầu Giáng sinh là thông tin và hợp pháp, nhưng chỉ mơ hồ. Cho đến khi bạn nói Giáng sinh ở Auckland và Auckland Giáng sinh ở Montréal, chúng tôi không có thời điểm cụ thể. Nếu bạn đang ghi lại khoảnh khắc thực tế mỗi khi xe trượt tuyết chạm xuống, bạn sẽ sử dụng TIMESTAMP WITH TIME ZONE
chứ không phải WITHOUT
loại.
Tương tự như Giáng sinh là đêm giao thừa. Khi quả bóng Times Square rơi ở New York , người dân ở Seattle vẫn đang làm lạnh rượu sâm banh và chuẩn bị còi tiệc . Tuy nhiên, chúng tôi sẽ ghi lại ý tưởng của thời điểm năm mới như 2017-01-01 00:00:00
trong một TIMESTAMP WITHOUT TIME ZONE
. Ngược lại, nếu chúng tôi muốn ghi lại khi quả bóng rơi ở New York hoặc khi người dân ở Seattle thổi còi, chúng tôi sẽ sử dụng TIMESTAMP WITH TIME ZONE
(không WITHOUT
) để ghi lại những khoảnh khắc thực tế đó, cách nhau ba giờ.
Vd: Ca làm việc của nhà máy
Một ví dụ khác có thể là ghi lại một chính sách liên quan đến thời gian đồng hồ treo tường trên nhiều địa điểm khác nhau. Giả sử chúng tôi có các nhà máy ở Detroit, Düsseldorf và Delhi. Nếu chúng ta nói rằng tại cả ba nhà máy, ca làm việc đầu tiên bắt đầu lúc 6 giờ sáng với giờ nghỉ trưa lúc 11:30 sáng, thì đó có thể được ghi là a TIMESTAMP WITHOUT TIME ZONE
. Một lần nữa, thông tin này hữu ích một cách mơ hồ nhưng không chỉ ra thời điểm cụ thể cho đến khi chúng ta áp dụng múi giờ. Một ngày mới bắt đầu sớm hơn ở phía đông. Vì vậy, nhà máy Delhi sẽ là nơi đầu tiên mở cửa vào lúc 6 giờ sáng. Vài giờ sau, nhà máy Düsseldorf bắt đầu làm việc lúc 6 giờ sáng. Nhưng nhà máy Detroit sẽ không thực sự mở cửa cho đến sáu giờ sau, khi 6 giờ sáng.
Đối chiếu ý tưởng này (về thời điểm ca làm việc tại nhà máy thường bắt đầu) với thực tế lịch sử là khi nào mỗi công nhân nhà máy đồng hồ bắt đầu ca làm việc của họ vào một ngày cụ thể. Đồng hồ là một khoảnh khắc thực sự, một điểm thực tế trên dòng thời gian. Vì vậy, chúng tôi sẽ ghi lại rằng trong một cột của loại TIMESTAMP WITH TIME ZONE
chứ không phải là WITHOUT
loại.
Vì vậy, có, có trường hợp sử dụng hợp pháp cho TIMESTAMP WITHOUT TIME ZONE
. Nhưng theo kinh nghiệm của tôi với các ứng dụng kinh doanh, chúng tương đối hiếm. Trong kinh doanh, chúng ta có xu hướng quan tâm đến những khoảnh khắc thực tế: khi nào hóa đơn thực sự đến, khi nào chính xác hợp đồng đó có hiệu lực, vào thời điểm nào giao dịch ngân hàng đó thực hiện. Vì vậy, trong các tình huống phổ biến như vậy, chúng tôi muốn các TIMESTAMP WITH TIME ZONE
loại.
Để thảo luận thêm, hãy xem Câu trả lời của tôi cho Câu hỏi tương tự, Tôi nên lưu trữ dấu thời gian UTC hoặc giờ địa phương để thay đổi
Bưu điện
Lưu ý rằng Postgres đặc biệt không bao giờ lưu thông tin múi giờ được chỉ định khi chèn dấu thời gian.
TIMESTAMP WITH TIME ZONE
- Bất kỳ múi giờ hoặc phần bù nào được chỉ định kèm theo dữ liệu đầu vào đều được sử dụng để điều chỉnh giá trị thành UTC và được lưu trữ. Sau đó, thông tin vùng / bù được thông qua sẽ bị loại bỏ. Hãy nghĩ về
TIMESTAMP WITH TIME ZONE
như TIMESTAMP WITH RESPECT FOR TIME ZONE
.
- Đầu vào 12:00 trưa ngày 7 tháng 3 năm nay tại Ấn Độ sẽ được điều chỉnh theo thời gian trong ngày bằng UTC bằng cách trừ năm giờ rưỡi: 6:30 sáng.
TIMESTAMP WITHOUT TIME ZONE
- Bất kỳ múi giờ hoặc phần bù được chỉ định kèm theo dữ liệu đầu vào hoàn toàn bị bỏ qua.
- Một đầu vào của 12:00 trưa ngày 7 tháng 3 năm nay ở Ấn Độ được ghi là 12:00 vào ngày 7 tháng 3 năm nay mà không có sự điều chỉnh.
Tiêu chuẩn SQL hầu như không đề cập đến các vấn đề về kiểu dữ liệu và hành vi thời gian. Vì vậy, cơ sở dữ liệu khác nhau rộng rãi trong xử lý ngày-thời gian.