Don't have an account?
Search for an answer or ask a question of the zone or Customer Support.
You need to sign in to do that
Sign in to start searching questions
Signup for a Developer Edition
Sign in to start a discussion
datetime型のデータをページに表示する際、タイムゾーンを指定する方法はありますか?(<apex:outputText>を使ったりして)
DBからの値はいつも標準時間しかとれないので、画面表示時日本時間がほしいのですが。。。
ご教授いただけたら幸いです。
よろしくお願いいたします。
少し無理やりな方法ですが。。
<apex::smileytongue:aram value="{!Now()+0.375}" />
1日24時間を’1’とします。
日本時間は9時間プラスさせればいいので、9/24=0.375をプラスさせます。
Nowの場合では問題なく出力されました。
inputText を利用する場合はコントローラ側でタイムゾーンを考慮して値を変更しなければならないようです。
日本時間であればGMT +9なのでコントローラ内でDatetime型の addHours メソッドを利用して+9時間すれば
良いかもしれません。
Case[] c = Database.query('select CreatedDate from case limit 1'); System.debug(c[0].CreatedDate); System.debug(c[0].CreatedDate.addHours(9));
ご存知のとおりinputFieldを利用すればユーザの詳細で設定されているタイムゾーンで時間を変換
して表示してくれます。
以下がケースオブジェクトのオープン日時を表示した例です。
https://c.ap0.visual.force.com/apex/AccountTest?Id=XXXXXXXXX
XXXXXXはケースのIDを指定して自分のユーザの詳細のタイムゾーンを変更して動作を確認してみてください。
<apex:page standardController="Case"> <apex:form > <apex:inputField value="{!Case.CreatedDate}"/> </apex:form> </apex:page>
Apexのコントローラ内でString型に変換してしまってもよいのであれば、Datetime型のformatメソッドを利用するのも一つの手だと思います。
System.debug('そのまま:' + Datetime.now());System.debug('フォーマット1:' + Datetime.now().format());System.debug('フォーマット2:' + Datetime.now().format('yyyyMMdd HHmmss'));
実行結果(日本時間 3月5日 0時52分に実行した場合):
そのまま:2010-03-04 15:52:02フォーマット1:2010/03/05 0:52フォーマット2:20100305 005202
formatメソッドについての詳細は、ロジックのドキュメントライブラリ(英語)にある「Force.com Apex Code Developer's Guide」を参照してみてください。
ご回答ありがとうございます。
apex:outputTextを使う場合は何か変換方法がありませんでしょうか?
下記は標準時間しか表示してくれないので、困っています。
ご教授いただければ幸いです。
<apex:outputText value="{0,date,yy/MM/dd hh:mm:ss}"><apex:param value="{!Rst.createddate}" />
少し無理やりな方法ですが。。
<apex::smileytongue:aram value="{!Now()+0.375}" />
1日24時間を’1’とします。
日本時間は9時間プラスさせればいいので、9/24=0.375をプラスさせます。
Nowの場合では問題なく出力されました。
All Answers
inputText を利用する場合はコントローラ側でタイムゾーンを考慮して値を変更しなければならないようです。
日本時間であればGMT +9なのでコントローラ内でDatetime型の addHours メソッドを利用して+9時間すれば
良いかもしれません。
Case[] c = Database.query('select CreatedDate from case limit 1'); System.debug(c[0].CreatedDate); System.debug(c[0].CreatedDate.addHours(9));
ご存知のとおりinputFieldを利用すればユーザの詳細で設定されているタイムゾーンで時間を変換
して表示してくれます。
以下がケースオブジェクトのオープン日時を表示した例です。
https://c.ap0.visual.force.com/apex/AccountTest?Id=XXXXXXXXX
XXXXXXはケースのIDを指定して自分のユーザの詳細のタイムゾーンを変更して動作を確認してみてください。
<apex:page standardController="Case"> <apex:form > <apex:inputField value="{!Case.CreatedDate}"/> </apex:form> </apex:page>
Apexのコントローラ内でString型に変換してしまってもよいのであれば、Datetime型のformatメソッドを利用するのも一つの手だと思います。
実行結果(日本時間 3月5日 0時52分に実行した場合):
formatメソッドについての詳細は、ロジックのドキュメントライブラリ(英語)にある「Force.com Apex Code Developer's Guide」を参照してみてください。
ご回答ありがとうございます。
apex:outputTextを使う場合は何か変換方法がありませんでしょうか?
下記は標準時間しか表示してくれないので、困っています。
ご教授いただければ幸いです。
<apex:outputText value="{0,date,yy/MM/dd hh:mm:ss}">
<apex:param value="{!Rst.createddate}" />
よろしくお願いいたします。
少し無理やりな方法ですが。。
<apex::smileytongue:aram value="{!Now()+0.375}" />
1日24時間を’1’とします。
日本時間は9時間プラスさせればいいので、9/24=0.375をプラスさせます。
Nowの場合では問題なく出力されました。