2009-07-14 27 views
16

Tôi tự hỏi nếu có bất kỳ lý do tốt nào để lưu trữ thông tin thời gian trong bất kỳ điều gì khác mà UTC (GMT)? Tôi tin rằng đây là một nguyên tắc vững chắc cho tất cả các công nghệ phần mềm. Việc chuyển đổi thành giờ địa phương chỉ đơn thuần là một bản dịch xảy ra ở lớp giao diện người dùng cho mục đích hiển thị. Tôi cũng đã thấy các trường hợp cần dịch chuyển để thực hiện thuật toán một cách chính xác (để xử lý các thay đổi ngày nửa đêm, v.v.).Có bao giờ là lý do chính đáng để lưu trữ thời gian không có trong UTC không?

+0

Giả sử bạn đang thiết kế máy chủ để quản lý một số sự kiện trong thế giới thực. Nói một sự kiện diễn ra "ở Los Angeles, mỗi Thứ Ba từ 2 giờ chiều đến 3 giờ chiều". Làm thế nào để bạn lưu trữ trong UTC? –

Trả lời

11

Tôi muốn nói tùy thuộc vào ứng dụng. Tôi làm việc trên các mô hình vật lý không gian của Ionosphere & Magnetosphere. Chúng tôi làm việc với thời gian địa phương từ tính, lưu trữ ngày & lần như Modified Julian Days.

0

Khi bạn chắc chắn rằng chỉ có giờ địa phương sẽ được sử dụng.

+5

Thậm chí sau đó, có một trường hợp tốt được thực hiện để sử dụng UTC nếu có bất kỳ loại hoạt động suốt ngày đêm nào. Nếu không, xử lý crossover tiết kiệm ánh sáng ban ngày sẽ trở thành một PITA lớn. Tôi nói từ kinh nghiệm cay đắng. –

+0

Hoặc nếu múi giờ có thể thay đổi. Giờ địa phương sẽ phải được cập nhật. –

6

Báo thức & các tác vụ được lên lịch đôi khi được lưu trữ theo giờ địa phương để chúng không bị ảnh hưởng bởi Giờ tiết kiệm ánh sáng ban ngày hoặc thay đổi múi giờ.

+0

Có phải chúng/được lưu trữ/trong thời gian địa phương hoặc sẽ là một cách tốt hơn để có được UTC và có một hàm thành viên convertToLocalTime()? – Pete

+3

@Pete: Hãy nghĩ về đồng hồ báo thức của tôi: Báo thức được đặt thành 7 giờ sáng theo giờ địa phương. Khi đồng hồ quay trở lại vào mùa đông, tôi không muốn bị đánh thức lúc 6 giờ sáng. Khi tôi đi công tác ở miền tây, tôi không muốn thức dậy vào nửa đêm chỉ vì 7 giờ sáng trở về nhà. – dave4420

+2

@Dave Vâng, vì vậy bạn chỉ cần thay đổi TIME_ZONE + = n, vì vậy convertToLocalTime (currentUtc, TIME_ZONE, isDaylightSavingsTime) sẽ trả về giờ địa phương (mặc dù nó được lưu trữ nội bộ dưới dạng UTC). – Pete

2

Bao giờ? Tôi chắc chắn có những lý do tốt trong một số trường hợp bị cô lập. Nói chung, mặc dù, lưu trữ UTC là tốt hơn nhiều so với thời gian địa phương, vì vậy tôi sẽ coi UTC là vị trí mặc định trừ khi có một số xem xét đặc biệt.

21

Nói chung, tôi thấy tốt hơn khi sử dụng UTC. Đôi khi bạn có thể cần giờ địa phương. Sau đó, tôi thà đi với thông tin múi giờ UTC +.

Thời gian chung có thể cực kỳ phức tạp cho các sự kiện lặp lại và bạn nên phân tích rất cẩn thận các trường hợp sử dụng.

Hãy tưởng tượng một cuộc họp định kỳ, vào thứ Ba hàng tuần lúc 9:00 sáng. Nếu DST thay đổi, cuộc họp vẫn sẽ diễn ra lúc (mới) 9:00 sáng.

Nhưng không thêm vào cuộc họp một số người ở Pháp. Đối với họ cuộc họp là lúc 6:00 chiều. Và họ thay đổi DST theo một quy tắc khác.

Khi bạn thay đổi DST, họ không làm vậy, vì vậy trong một thời gian (cho đến khi Pháp thay đổi DST) ai đó phải "tắt": cuộc họp của bạn sẽ vào lúc 10 giờ sáng, thời gian của họ sẽ ở 6 giờ chiều hoặc giữ tại 9 giờ sáng và chuyển họ lúc 5 giờ chiều. Không có cách nào khác, máy tính không có gì để làm với nó.

Ứng dụng sẽ quyết định ai sẽ là "cố định"? Đây có phải là nhóm có hầu hết các thành viên không? (1 người ở Mỹ vs 20 ở Pháp?) Hay là về tầm quan trọng của người đó? (nếu 1 anh chàng ở Hoa Kỳ là Tổng Giám đốc?)

Làm cách nào để lưu trữ thông tin đó? Giải pháp tốt nhất của tôi là sử dụng UTC + một "múi giờ chính" Người dùng trong chiến thắng "múi giờ chính" (giữ nguyên cố định).

Mọi thứ có thể trở nên khá phức tạp, nhưng nói chung tôi đã tìm thấy UTC giải quyết nhiều probelems hơn giới thiệu.

+2

+1 Trường hợp ví dụ tuyệt vời – Triptych

+1

Hãy sửa tôi nếu tôi sai, nhưng tôi nghĩ rằng việc lưu trữ múi giờ tổng thể UTC + không giải quyết được vấn đề này về thay đổi DST. Ví dụ thực tế: 1 - Bạn cần lưu trữ ngày giờ "1 năm kể từ bây giờ trong 9 giờ sáng giờ NY". bạn tính toán nếu điều này trong UTC và lưu trữ nó trên DB của bạn cùng với múi giờ NY. 2 - Trước khi 1 năm trôi qua, NY thay đổi DST. Ngày ban đầu đó lúc 9 giờ sáng giờ NY không phải là cùng ngày mà chúng tôi đã lưu trữ. – fjsj

2

Trong hệ thống nhúng, bạn có thể nhận được thời gian từ một nguồn trong một số loại biểu mẫu "ve qua epoch".

Nếu thời gian được cập nhật tương đối thường xuyên và hiển thị ít thường xuyên, bạn có thể lưu trữ nó theo cùng cách mà nó được cung cấp cho bạn và chỉ chuyển đổi nó để hiển thị khi cần.

Nói chung, mặc dù, UTC là con đường để đi trừ khi có những cân nhắc khác.

4

UTC là tiêu chuẩn lưu giữ thời gian có độ chính xác và chính xác của TAI, nhưng với giây nhảy thêm vào trong khoảng thời gian không đều để cho phép nó theo dõi chặt chẽ thời gian mặt trời trung bình (UT1).

Nếu hệ thống bạn đang làm việc không thể xử lý giây nhuận, thì Bureau International des Poids et Mesures khuyến nghị TAI được sử dụng thay cho UTC.

Xem: http://tycho.usno.navy.mil/leapsec.html

+1

Bây giờ bạn cần nhiều upvotes hơn cho điều này, tôi không hiểu tại sao mọi người nghĩ rằng thời gian posix là tuyến tính khi nó quay trở lại sau mỗi vài năm – Pacerier

+0

Pacerier: Nó đi ngược? Geez. Tôi không biết điều đó. Tôi nghĩ rằng nó chỉ nhảy vọt về phía trước là kết quả của sự quay chậm của Trái đất. –

+2

Nó đã thực sự không bao giờ nhảy về phía trước trước đây trong lịch sử (nó * có thể * trong tương lai) nhưng đã đi ngược trở lại trung bình 1,5 năm một lần. Nếu chúng ta có một đồng hồ bấm giờ tách ra sau mỗi nửa giây, thời gian sẽ diễn ra như sau: '58.0 58.5 59.0 59.5 00.0 00.5 00.0 00.5 01.0' http://en.wikipedia.org/wiki/Unix_time – Pacerier

Các vấn đề liên quan