ユーザーのタイムゾーンに応じた現在時刻の表示
こんな感じに、レポートを実行した時刻をレポート上に表示したい時があります。
これは、localtimestamp という関数で表示しているのですが、この関数はデータベース・ソフトウェアを実行しているサーバーの現在時刻を返します。
ところでCognosにはユーザー毎に「タイム・ゾーン」の情報を持っているので、ユーザーのタイムゾーンに応じた「現在時刻」を表示したい、という要件がありますが、localtimestampでは常にサーバー時間なので、ユーザーのタイムゾーンなどお構いなしです。
何とかこの要件を実現できないだろうか、という時に役立つ実装です。
実装
まず、レポート実行ユーザーのタイムゾーンは以下で取得できます。※「TimeZone」というデータアイテムで作成
# sq($account.personalInfo.timeZoneID)#
この様に「_shift_timezone」関数を使う事で、東京のタイムゾーンから、各ユーザーのタイムゾーンに時刻変換します。※「TimeZoneTime」というデータアイテムで作成
_shift_timezone (localtimestamp,'Asia/Tokyo',#sq($account.personalInfo.timeZoneID)#)
先程のニューヨークユーザーで実行すると、ニューヨーク時間の表示になります。
ユーザーのタイムゾーンで時刻表示したい、という要件があった場合、是非思い出してご活用下さい。