次: , 前: Time Display Format, 上: Calendar


39.5 夏時間

Emacsは、標準時間と夏時間の違いを理解しています。 つまり、日出入時刻、夏至冬至、春分秋分、朔弦望ではその違いを考慮します。 夏時間の規則は、地域ごと、年ごとに変わりえます。 正しく扱うためには、どの規則が適用されるかをEmacsが知っている必要があります。

読者の居住地域に適用される規則を記録している オペレーティングシステムもあります。 これらのシステム上では、Emacsは自動的にシステムから必要な情報を得られます。 この情報の一部やすべてが欠落していると、 GNU世界の中心であるマサチューセッツ州ケンブリッジで 現在使用している規則で補います。

デフォルトで選んだ規則が読者の地域に適切でないときには、 変数calendar-daylight-savings-startscalendar-daylight-savings-endsに設定してEmacsに伝えます。 これらの値は、変数yearを使ったLisp式である必要があります。 これらの式を評価すると、夏時間を開始/終了するグレゴリオ暦の日付を表す (month day year)の形のリストに なる必要があります。 夏時間をとらない場合には、値はnilであるべきです。

Emacsは、これらの式を用いて夏時間の開始と終了を判定し、 祝祭日や太陽/月に関する時刻を補正します。

マサチューセッツ州ケンブリッジに対する値は、つぎのとおりです。

     (calendar-nth-named-day 1 0 4 year)
     (calendar-nth-named-day -1 0 10 year)

つまり、指定されたyear年の4月の最初の日曜日と その年の10月の最後の日曜日です。 10月1日に夏時間を始めると変更したとすると、 変数calendar-daylight-savings-startsに つぎのように設定します。

     (list 10 1 year)

より複雑な例として、ヘブライ暦のニサンの初日に夏時間が始まるとしましょう。 calendar-daylight-savings-startsには、 つぎの値を設定します。

     (calendar-gregorian-from-absolute
       (calendar-absolute-from-hebrew
         (list 1 1 (+ year 3760))))

これは、ニサンはヘブライ暦の最初の月であり、 ヘブライ暦年とグレゴリオ暦年はニサンで3760年違うからです。

読者の地域で夏時間をとっていなかったり、 つねに標準時間を望む場合には、 calendar-daylight-savings-startscalendar-daylight-savings-endsnilを設定します。

変数calendar-daylight-time-offsetは、 夏時間と標準時間の分で計った差を指定します。 ケンブリッジに対する値は60です。

変数calendar-daylight-savings-starts-timecalendar-daylight-savings-ends-timeは、 夏時間と標準時間との移行が行われる 地方時の真夜中の0時からの経過分を指定します。 ケンブリッジでは、どちらの変数の値も120です。