UTCは現地時間で約25秒差があります。

UTCは現地時間で約25秒差があります。

私はこれを他のシステムで比較しましたが、Arago Linuxを実行している組み込みシステムでのみこの動作を得ました。 BusyBox v.1.13.2の日付コマンドを使用しています。

私はこれら2つのコマンドを「同時に」実行しました。

[root@host:~] date; date -u
Fri Mar 18 12:56:49 CET 2016
Fri Mar 18 11:57:14 UTC 2016

zdumpの出力は予想通りです(+3600秒、+1時間)。

/etc/localtime  Sun Mar 29 01:00:24 2015 UT = Sun Mar 29 01:59:59 2015 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 29 01:00:25 2015 UT = Sun Mar 29 03:00:00 2015 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Oct 25 01:00:24 2015 UT = Sun Oct 25 02:59:59 2015 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Oct 25 01:00:25 2015 UT = Sun Oct 25 02:00:00 2015 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 27 01:00:24 2016 UT = Sun Mar 27 01:59:59 2016 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 27 01:00:25 2016 UT = Sun Mar 27 03:00:00 2016 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Oct 30 01:00:24 2016 UT = Sun Oct 30 02:59:59 2016 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Oct 30 01:00:25 2016 UT = Sun Oct 30 02:00:00 2016 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 26 01:00:24 2017 UT = Sun Mar 26 01:59:59 2017 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 26 01:00:25 2017 UT = Sun Mar 26 03:00:00 2017 CEST isdst=1 gmtoff=7200

この25秒オフセットはどこから来ましたか?

答え1

25秒は、2012年7月1日と2015年7月1日のPOSIX準拠のtz領域と「正しい」tz領域の違いです。 tzdataがそれほど古く、このコマンドを実行するシェルのデフォルトのタイムゾーンがPOSIX CETで、「-u」タイムゾーンがUTCの「正しい」バージョンの場合、「正しい」コードはシステムクロックがPOSIXに違反すると仮定します。実際にはすべてのうるう秒を計算するので、「正しい」コードはシステムクロックを市販に変換する過程でこの25秒を引いたものです。

答え2

date最初のコマンド()を追跡すると、次のようになります。

open("/etc/localtime", O_RDONLY)

次が指すタイムゾーンファイルにアクセスします。/etc/現地時間これは/usr/share/zoneinfo/ヨーロッパ/チューリッヒ私は。これまではとてもよかったです。


2番目のcommand()のトレースは、機能しdate -uない理由についてのヒントを提供します。

open("/usr/share/zoneinfo/UTC0", O_RDONLY)

zoneinfoディレクトリにはそのようなファイルがなかったので、UTCをUTC0にコピーする必要があり、すべてが期待どおりに機能します。


date; date -u
Fri Apr 26 09:52:44 CET 2016
Fri Apr 26 07:52:44 UTC 2016

答え3

04:05:12 CETと1457838339モジュールで86400の違いはタイムゾーンです。 27秒のオフセットを取得すると、これは時間帯の定義に問題があることを意味し、最終的に予想される(約)1時間ではなく27秒のオフセットを指定します。TZ変数から始めてタイムゾーンの設定を確認してください。 Arago LinuxはGlibcを使用しています。タイムゾーンを指定するための複数のオプションただし、通常はタイムゾーンデータベースのタイムゾーンファイルが使用されます(したがって、ローカルDSTルールに準拠し、歴史的な進歩に従う必要があるかTZ使用するために設定をオフにする必要があります)。あなたはそれを使用することができますCETEurope/ParisTZ/etc/localtimezdump -vタイムゾーンの説明を取得します。

関連情報