2017-09-24 11 views
1

私のシステムでfind /usr/share/zoneinfo/ -type f -exec file {} \; |grep -v 'no leap'を実行しました。すべての単一タイムゾーンファイルにはうるう秒がありませんでした。 Mac OS Xのどこにでもうるう秒を保存できますか?私はうるう秒を必要とするライブラリを書いていますので、ネットワーク経由で接続したくないのですが、何らかのシステムコールを受け入れることは可能です。 MacOSでIANAデータベースに格納されている何のうるう秒の情報はありませんMac OS Xにはどこに閏秒が保存されていますか?

+0

限りドキュメントはこの例を持っている

MacOSはうるう秒をしません。代わりに、非常に古い時代は数十秒くらいになります。マシンが飛躍すると、システムの内部時計エラーのように振る舞います。ネットワークタイムサーバによって修正される。基本的にアップルの感想は、コンピュータクロックはあまり正確ではないので、うるう秒で動作することはCPUサイクルの無駄です。 –

答えて

2

:を/ usr/share/zoneinfoの

サードパーティ製C++ 11のライブラリを使用して喜んでいる場合は、Howard Hinnant's time zone libraryはあなたに対処する上で完全な機能を提供しますうるう秒。これには、IANAデータベースのダウンロードが必要です。しかし、このライブラリを自動的にダウンロードするように設定することも、手動でダウンロードすることもできます。ライブラリはそのライブラリにアクセスします。

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

int 
main() 
{ 
    using namespace date; 
    using namespace std::chrono_literals; 
    auto start = to_utc_time(sys_days{2015_y/jul/1} - 500ms); 
    auto end = start + 2s; 
    for (auto utc = start; utc < end; utc += 100ms) 
    { 
     auto sys = to_sys_time(utc); 
     auto tai = to_tai_time(utc); 
     auto gps = to_gps_time(utc); 
     std::cout << format("%F %T SYS == ", sys) 
        << format("%F %T %Z == ", utc) 
        << format("%F %T %Z == ", tai) 
        << format("%F %T %Z\n", gps); 
    } 
} 

2015年6月、うるう秒の挿入に近いこの例の繰り返し処理時間を、システム時刻、UTC、TAIとGPSクロック基準を比較する:

2015-06-30 23:59:59.500 SYS == 2015-06-30 23:59:59.500 UTC == 2015-07-01 00:00:34.500 TAI == 2015-07-01 00:00:15.500 GPS 
2015-06-30 23:59:59.600 SYS == 2015-06-30 23:59:59.600 UTC == 2015-07-01 00:00:34.600 TAI == 2015-07-01 00:00:15.600 GPS 
2015-06-30 23:59:59.700 SYS == 2015-06-30 23:59:59.700 UTC == 2015-07-01 00:00:34.700 TAI == 2015-07-01 00:00:15.700 GPS 
2015-06-30 23:59:59.800 SYS == 2015-06-30 23:59:59.800 UTC == 2015-07-01 00:00:34.800 TAI == 2015-07-01 00:00:15.800 GPS 
2015-06-30 23:59:59.900 SYS == 2015-06-30 23:59:59.900 UTC == 2015-07-01 00:00:34.900 TAI == 2015-07-01 00:00:15.900 GPS 
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.000 UTC == 2015-07-01 00:00:35.000 TAI == 2015-07-01 00:00:16.000 GPS 
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.100 UTC == 2015-07-01 00:00:35.100 TAI == 2015-07-01 00:00:16.100 GPS 
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.200 UTC == 2015-07-01 00:00:35.200 TAI == 2015-07-01 00:00:16.200 GPS 
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.300 UTC == 2015-07-01 00:00:35.300 TAI == 2015-07-01 00:00:16.300 GPS 
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.400 UTC == 2015-07-01 00:00:35.400 TAI == 2015-07-01 00:00:16.400 GPS 
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.500 UTC == 2015-07-01 00:00:35.500 TAI == 2015-07-01 00:00:16.500 GPS 
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.600 UTC == 2015-07-01 00:00:35.600 TAI == 2015-07-01 00:00:16.600 GPS 
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.700 UTC == 2015-07-01 00:00:35.700 TAI == 2015-07-01 00:00:16.700 GPS 
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.800 UTC == 2015-07-01 00:00:35.800 TAI == 2015-07-01 00:00:16.800 GPS 
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.900 UTC == 2015-07-01 00:00:35.900 TAI == 2015-07-01 00:00:16.900 GPS 
2015-07-01 00:00:00.000 SYS == 2015-07-01 00:00:00.000 UTC == 2015-07-01 00:00:36.000 TAI == 2015-07-01 00:00:17.000 GPS 
2015-07-01 00:00:00.100 SYS == 2015-07-01 00:00:00.100 UTC == 2015-07-01 00:00:36.100 TAI == 2015-07-01 00:00:17.100 GPS 
2015-07-01 00:00:00.200 SYS == 2015-07-01 00:00:00.200 UTC == 2015-07-01 00:00:36.200 TAI == 2015-07-01 00:00:17.200 GPS 
2015-07-01 00:00:00.300 SYS == 2015-07-01 00:00:00.300 UTC == 2015-07-01 00:00:36.300 TAI == 2015-07-01 00:00:17.300 GPS 
2015-07-01 00:00:00.400 SYS == 2015-07-01 00:00:00.400 UTC == 2015-07-01 00:00:36.400 TAI == 2015-07-01 00:00:17.400 GPS 
関連する問題