記事
· 2025年12月25日 2m read

サマータイムの対応について

これは InterSystems FAQ サイトの記事です。

InterSystems 製品の内部日付時刻($HOROLOG)を利用して時刻を取得している場合、オペレーティング・システムが提供するアルゴリズムに基づいて季節的な時刻調整を行います。

そのため、オペレーティングシステムにてサマータイムの調整が行われる場合は、InterSystems 製品は、オペレーティングシステムで対応したサマータイム時刻で動作します。

注意点としては、$HOROLOG 値が大きく変更されるケースもあるため、時刻比較やこの値をキーにしたアプリケーションの処理などがもしある場合は、その変更を考慮していただく必要があります。

ご参考:「ローカル時刻調整のしきい値

なお、$NOW() 関数を使用して内部日付時刻を取得している場合は、オペレーティングシステムのサマータイムの調整に対応していませんのでご注意ください。

$NOW() 関数は、$ZTIMEZONEの値を使用してローカル時刻を決定しています。
$ZTIMEZONEは1年を通して連続的で、サマータイム(DST)などのローカル時刻の調整に対応していないためです。

また、小数点以下を含むタイムスタンプ値をサマータイム対応済のローカル時刻で取得したい場合、$HOROLOG では対応できませんので、以下の2つ方法のどちらかを利用して取得します。

1)$ZTIMESTAMPの値を利用して、ロカール時刻に変換する方法を利用する方法

$ZDATETIMEH()の第2引数に -3 を指定することで UCT 時刻からローカル時刻に変更されます。また、$ZDATETIME()の第4引数を利用して、時刻値の小数点の有効桁数を指定できます。

write $ZDATETIME($ZDATETIMEH($ZTIMESTAMP,-3),3,,6)

 

2)%Library.UTCクラスのNowLoca()メソッドを使用する方法(注意:小数第3位までの固定出力です)

write ##class(%UTC).NowLocal()
ディスカッション (0)1
続けるにはログインするか新規登録を行ってください