Cognos ユーザーのタイムゾーンに応じた現在時刻の表示


ユーザーのタイムゾーンに応じた現在時刻の表示

こんな感じに、レポートを実行した時刻をレポート上に表示したい時があります。

これは、localtimestamp という関数で表示しているのですが、この関数はデータベース・ソフトウェアを実行しているサーバーの現在時刻を返します。

ところでCognosにはユーザー毎に「タイム・ゾーン」の情報を持っているので、ユーザーのタイムゾーンに応じた「現在時刻」を表示したい、という要件がありますが、localtimestampでは常にサーバー時間なので、ユーザーのタイムゾーンなどお構いなしです。

何とかこの要件を実現できないだろうか、という時に役立つ実装です。

実装

まず、レポート実行ユーザーのタイムゾーンは以下で取得できます。※「TimeZone」というデータアイテムで作成

#sq($account.personalInfo.timeZoneID)#

この様に「_shift_timezone」関数を使う事で、東京のタイムゾーンから、各ユーザーのタイムゾーンに時刻変換します。※「TimeZoneTime」というデータアイテムで作成

_shift_timezone (localtimestamp,'Asia/Tokyo',#sq($account.personalInfo.timeZoneID)#)

レポートにこの様にシングルトンで配置して。

先程のニューヨークユーザーで実行すると、ニューヨーク時間の表示になります。

ユーザーのタイムゾーンで時刻表示したい、という要件があった場合、是非思い出してご活用下さい。