2012-01-19 59 views
6

Nó cảm thấy với tôi như ở khắp mọi nơi tôi đã nhìn thấy thuật toán liên quan đến thời gian trong lập trình, GMT là thời gian cơ sở. Ví dụ, tôi đã nói với luôn luôn lưu trữ thời gian trong một DB trong GMT + 00 để thay đổi múi giờ không làm gián đoạn bất cứ điều gì.Tại sao GMT lại là tiêu chuẩn cho thời gian máy tính thay vì UTC?

  1. Tôi có đúng là GMT có vẻ là múi giờ cơ sở trong phát triển phần mềm không?

  2. Nếu có, tại sao không phải là UTC? Tại sao nó không phổ biến để nói "UTC + 01" thay vì "GMT + 01" xem xét rằng thậm chí timestamps Unix được định nghĩa từ UTC (http://en.wikipedia.org/wiki/Unix_time)

+1

Tôi tin rằng GMT và UTC là như nhau. Sự khác biệt là tên của tổ chức xác định chúng. Người Anh (GMT = Greenwich Meridian Time) đã ra mắt phiên bản quốc tế (UTC). Xem http://en.wikipedia.org/wiki/UTC –

+0

Vì UTC là tiếng Pháp và GMT là tiếng Anh? – arx

+0

Người ta thường sử dụng 'UTC + 01': [Danh sách các từ viết tắt múi giờ] (http://en.wikipedia.org/wiki/List_of_time_zone_abbreviations), [Danh sách múi giờ theo độ lệch UTC] (http: // vi .wikipedia.org/wiki/List_of_time_zones_by_UTC_offset # toc) –

Trả lời

7

GMT và UTC là cùng một lúc. UNIX thời gian dựa trên UTC, vì vậy bạn có thể tìm thấy nhiều hơn về hệ thống UNIX và * nix.

UTC cũng được theo dõi chặt chẽ hơn dưới dạng thời gian chính thức (nghĩa là gần đúng hơn với thời gian "đúng" dựa trên vòng quay của trái đất). Nhưng trừ khi phần mềm của bạn cần tính toán thứ hai, nó sẽ không tạo sự khác biệt cho dù bạn sử dụng GMT hay UTC.

Mặc dù, bạn có thể xem xét hiển thị cho người dùng. Một định dạng có thể quen thuộc hơn một định dạng khác. Tôi thường đi với UTC cho các ứng dụng toàn cầu, và GMT cho các ứng dụng châu Âu hoặc Anh.

+3

chỉnh sửa nhẹ: theo http://en.wikipedia.org/wiki/Coordinated_Universal_Time, UTC dựa trên đồng hồ nguyên tử và không dựa trên kỹ thuật tắt xoay vòng trái đất như UT1 và GMT. Nhưng sau khi nghiên cứu, tôi thấy rằng giờ GMT cũng giống như UTC nếu bạn không quan tâm đến độ chính xác phụ thứ hai. –

+0

@ Thr4wn UTC và TAI được điều phối, nhưng chúng cách nhau hơn 30 giây. Điều này là do UTC đôi khi thêm giây nhuận để duy trì trong vòng một giây của UT1. Tôi nghĩ đó là vấn đề chính xác so với độ chính xác. UTC và TAI * chính xác * cách nhau 34 giây, nhưng UTC và UT1 chính xác hơn * liên quan (trong vòng 1 giây). –

+0

ah, điểm tốt. Tôi không bao giờ nghĩ về điều đó. –

1

Tôi sẽ nói rằng đó là bởi vì hầu hết mọi người được sử dụng để GMT. Nếu bạn sẽ hiển thị thông tin cho một người, đặc biệt là thời gian, bạn sẽ muốn có một định dạng mà họ có thể dễ dàng hiểu được. Sử dụng GMT giúp bạn tiết kiệm thêm các bước chuyển đổi sang UTC và ngược lại.

+0

GMT và UTC là các tên khác nhau cho cùng một điều. Không có gì để chuyển đổi. – arx

+0

@arx, đây là cùng một thời điểm, nhưng không giống nhau! –

+0

Vì vậy, nếu có một sự khác biệt, phải có một số loại chuyển đổi phải được thực hiện giữa hai, phải không? – CSturgess

2

Phản hồi được chấp nhận này thực sự sai. Đầu tiên chúng không giống nhau bằng bất kỳ phương tiện nào. Thứ hai UTC là không chặt chẽ hơn phù hợp với thời gian "đúng" dựa trên vòng quay của trái đất, là hoàn toàn trái ngược. UTC chính xác hơn về thước đo 'thời gian'. Mỗi giây cuối cùng giống nhau kể từ khi được dựa trên thời gian nguyên tử và độ chính xác là tăng cao (nó sẽ mất 30 nghìn năm để bù đắp một giây).

GMT thay vì theo dõi xoay vòng trái đất, vì điều này không phải lúc nào cũng giống nhau (xoay vòng trái đất đang chậm lại) mỗi giây khác nhau. Tất nhiên, khác nhau trong một lượng thời gian thực sự nhỏ. Nhưng với mục đích cientific, UTC chính xác hơn rất nhiều so với GMT.

Đây là lý do tại sao UTC thay đổi +2 giây sau mỗi 4/5 năm (do xoay vòng chậm hơn mỗi giây cần quay lớn hơn UTC), vì vậy nó theo thời gian quay vòng trái đất GMT ít hơn thứ hai của sự khác biệt.

+0

FYI - bạn đã mô tả UT1, không phải GMT. [Wikipedia nói nó khá tốt] (https://en.wikipedia.org/wiki/Greenwich_Mean_Time): "... Hôm nay GMT được coi là tương đương với UTC cho mục đích dân sự của Anh ... và để điều hướng được coi là tương đương với UT1. .. " –

1

GMT và UTC không giống nhau. Đọc https://en.wikipedia.org/wiki/Greenwich_Mean_Time và liên kết trong đó đến UTC để phân biệt.

Một số người dùng máy tính bị nhầm lẫn bởi thực tế là cho đến khi Windows 7, không có hệ điều hành Microsoft hỗ trợ đầy đủ UTC, và do đó giữ nhãn thời gian tham chiếu quốc tế là GMT.

Vấn đề chính là cách Windows đọc và đặt đồng hồ BIOS. Windows XP không thể xử lý việc đặt đồng hồ BIOS thành UTC, vì vậy bạn phải đặt đồng hồ BIOX thành giờ địa phương và sau đó dựa vào Windows theo dõi sự khác biệt.

Kể từ Windows 7, Windows có thể xử lý việc đặt đồng hồ BIOS thành UTC và thực hiện tất cả các phép tính (chủ yếu?) Phù hợp với UTC, vì vậy Microsoft đã quyết định chuyển nhãn từ GMT sang UTC.

Xem:

https://superuser.com/questions/185773/does-windows-7-support-utc-as-bios-time

+0

Bit về Windows không chính xác. Nhãn thay đổi từ GMT thành UTC đơn giản chỉ vì Microsoft nhận ra rằng UTC là thuật ngữ chính xác hơn. Nó không liên quan gì đến những gì có thể hoặc không thể được hỗ trợ. Không có thay đổi chức năng nào được thực hiện để xử lý thời gian trong Windows 7.Một số chi tiết [trong bài viết này] (http://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html) cho biết 'RealTimeIsUniversal' đã có từ ít nhất Windows 2000 và có thể trước đó (đi trở lại Windows NT). –

3

Tôi nghĩ rằng nó sẽ là thú vị để khám phá những gì IANA timezones hiện đang sử dụng chữ viết tắt "GMT", cả bây giờ và 6 tháng kể từ bây giờ (để đón những hiện đúng thời hạn tiết kiệm ánh sáng ban ngày).

Sử dụng free, open source C++11/14 library này, tôi đã viết chương trình này:

#include "tz.h" 
#include <string> 
#include <iostream> 
#include <vector> 

template <class Duration> 
std::vector<date::zoned_time<std::common_type_t<Duration, std::chrono::seconds>>> 
find_by_abbrev(date::sys_time<Duration> tp, const std::string& abbrev) 
{ 
    using namespace std::chrono; 
    using namespace date; 
    std::vector<zoned_time<std::common_type_t<Duration, seconds>>> results; 
    auto& db = get_tzdb(); 
    for (auto& z : db.zones) 
    { 
     if (z.get_info(tp).abbrev == abbrev) 
      results.push_back(make_zoned(&z, tp)); 
    } 
    return results; 
} 

int 
main() 
{ 
    using namespace std::chrono; 
    using namespace date; 
    auto now = system_clock::now(); 
    auto v = find_by_abbrev(now, "GMT"); 
    for (auto const& x : v) 
     std::cout << format("%F %H:%M:%S %Z %z", x) << " " 
        << x.get_time_zone()->name() << '\n'; 
    std::cout << '\n'; 
    v = find_by_abbrev(now + months{6}, "GMT"); 
    for (auto const& x : v) 
     std::cout << format("%F %H:%M:%S %Z %z", x) << " " 
        << x.get_time_zone()->name() << '\n'; 
} 

này tìm kiếm hành tinh cho tất cả các múi giờ hiện đang sử dụng "GMT", cả bây giờ, và 6 tháng kể từ bây giờ, và in chúng ra:

2016-06-18 01:00:25.632773 GMT +0000 Africa/Abidjan 
2016-06-18 01:00:25.632773 GMT +0000 Africa/Accra 
2016-06-18 01:00:25.632773 GMT +0000 Africa/Bissau 
2016-06-18 01:00:25.632773 GMT +0000 Africa/Monrovia 
2016-06-18 01:00:25.632773 GMT +0000 America/Danmarkshavn 
2016-06-18 01:00:25.632773 GMT +0000 Atlantic/Reykjavik 
2016-06-18 01:00:25.632773 GMT +0000 Etc/GMT 

2016-12-17 15:55:01.632773 GMT +0000 Africa/Abidjan 
2016-12-17 15:55:01.632773 GMT +0000 Africa/Accra 
2016-12-17 15:55:01.632773 GMT +0000 Africa/Bissau 
2016-12-17 15:55:01.632773 GMT +0000 Africa/Monrovia 
2016-12-17 15:55:01.632773 GMT +0000 America/Danmarkshavn 
2016-12-17 15:55:01.632773 GMT +0000 Atlantic/Reykjavik 
2016-12-17 15:55:01.632773 GMT +0000 Etc/GMT 
2016-12-17 15:55:01.632773 GMT +0000 Europe/Dublin 
2016-12-17 15:55:01.632773 GMT +0000 Europe/London 

Tôi đã hài lòng khi thấy rằng trong mọi trường hợp, chênh lệch UTC là +0000. Bạn không bao giờ biết với các chính trị gia và múi giờ. Một số cơ quan lập pháp có thể dễ dàng tuyên bố "Green Mountain Time" (và chỉ có thể ngày mai).

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