Visualforceに日付時間を表示する時にタイムゾーンを設定する

日付時間( datetime )型のデータをVisualforceに表示する時に、apex:outputtextを使用すればフォーマットさせて表示することが出来るのだが、GMTで表示されてしまうため9時間ずれてしまう。

これはオプションでは用意されていないようで、apex側でずらす時間を指定してそれを足してやる、という方法でタイムゾーンを指定してやる必要があるよう。
apexで使用アカウントでセットされているタイムゾーンを取得してずれている時間のミリ秒を取得してそれを足す、という方法。

apex

1
2
3
4
5
6
7
8
//表示する日付
datetime_test = Datetime.newInstance(2018, 6, 5, 0, 0, 0);

public Double timezoneOffset{get{
    TimeZone tz = UserInfo.getTimeZone();
    //Milliseconds to Day
    return tz.getOffset(DateTime.now()) / (1000 * 3600 * 24.0);
}}

VF

1
2
3
4
5
6
7
8
9
10
11
12
{!datetime_test}
// Mon Jun 04 15:00:00 GMT

<apex:outputtext value="{0, date, yyyy/MM/dd HH:mm:ss}">
    <apex:param value="{!datetime_test}" />
</apex:outputtext>
// 2018 2018/06/04 15:00:00

<apex:outputtext value="{0, date, yyyy/MM/dd HH:mm:ss}">
    <apex:param value="{!datetime_test + timezoneOffset}" />
</apex:outputtext>
// 2018/06/05 00:00:00

参考

   このエントリーをはてなブックマークに追加