Unix は GMT からのマシンのオフセットを内部的に保存しますか? たとえば、インドの標準時は GMT + 5:30 です。この 5:30 はどこかに保存されていますか?
以下のようなスクリプトで使用するには、これが必要です
if[[ off is "some value"]]
then
some statements
fi
従来、UNIXでは、カーネルは現在の時刻をタイムゾーンに依存しない形式で保持します。これは、アプリケーションに報告するものです。
アプリケーションは、環境変数やユーザー構成(ユーザーごとに異なる場合や、ユーザーごとに異なるセッション)を参照して、時間を報告するタイムゾーンを決定します。この目的のために、ディスク上に保持されているテーブルのオフセットを保持します。システムが認識しているすべてのタイムゾーン(これらのテーブルは、日光節約アルゴリズムの政治的変更のために継続的に更新する必要があります)。
次のプログラムは、EDTで「-04:00」を出力し、TZを「Asia/Kolkata」に設定すると「04:30」を出力します。
#include <stdio.h>
#include <time.h>
int
main ()
{
int hours;
int minutes;
int negative_sign = 1;
tzset ();
// printf ("tzname: %s tzname[1]: %s\n", tzname [0], tzname [1]);
// printf ("DST: %d\n", daylight); /* 0 when no DST */
// printf ("timezone: %ld\n", timezone);
/* 'timezone' is the number of seconds west of GMT */
/* It is negative for tzs east of GMT */
if (timezone <= 0) {
timezone = -timezone;
negative_sign = 0;
}
if (daylight) {
timezone -= 3600; /* substract 1h when DST is active */
if (timezone <= 0) {
timezone = -timezone;
negative_sign = 0;
}
}
timezone /= 60; /* convert to minutes */
hours = timezone / 60;
minutes = timezone % 60;
printf ("%s%02d:%02d\n", (negative_sign ? "-" : ""), hours, minutes);
return 0;
}
自由に使用/変更して、シェルスクリプトから呼び出してください。
カーネルはGMT時間を内部的に保持し、現地時間を要求されると、タイムゾーン情報を使用してオフセットを計算します。このように、タイムゾーンの変更が必要な場合、内部的にはクロックを変更する必要はありません。
カーネルまたはドライバーでは、いいえ。
通常、これは/ etc/localtimeというファイルに保存されます。そのファイルは、多くの場合、夏時間の開始時間と終了時間、GMTからのオフセットなど、GMTを現地時間に変換するためのすべての「ルール」を(圧縮形式で)含む他のファイルへのリンクです。