2012年5月1日火曜日

date型とdatetime型についてあれこれ-その1

SalesForceのdatetime型の取り扱いは少々注意が必要です。

1.現在の取り方の違い
データ型メソッド結果
date型date.today()Tue May 01 00:00:00 GMT 2012
datetime型datetime.now()Tue May 01 06:31:59 GMT 2012
string型に変換datetime.now().format('yyyy/MM/dd hh:mm:ss')2012/05/01 03:31:59

datetime型でタイムスタンプを取得する場合、now()を使用するとタイムゾーンがGMTで返ってきてしまいます。
formatを使用すると、ローカルのタームゾーンに変換されます。datetime型の場合、メソッドを活用することでタイムゾーンを変えることができます。
詳しくはこちら。http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_methods_system_datetime.htm

2.date型のフォーマット
date型のフォーマットは、書式を細かく設定するものではないようです。
date.today().format('yyyy/MM/dd') は、エラーになります。
date型のフォーマットは、ユーザーのロケーションに合わせた日付の形式に変えてくれるだけのようで、
date.today().format() とすると、単純に 2012/05/01 という文字列が返ってきます。

3.datetime型のフォーマット
datetime型のformatメソッドの書式はJavaと同様です。VB出身者はフォーマットの書式で戸惑うかもしれません。
ポイントは大文字と小文字で意味が異なるという点です。
書式結果
yyyy/MM/dd hh:mm:ss2012/05/01 04:00:29 ○
yyyy/mm/dd hh:mm:ss2012/00/01 04:00:29 ×
yyyy/MM/DD HH:MM:SS2012/05/122 16:05:759 ×
YYYY/MM/DD HH:MM:SS は、エラーになります。

参考:書式パターン文字一覧
文字説明
G 紀元 AD
y 1996, 96
M July, Jul, 07
w 年における週 27
W 月における週 2
D 年における日 189
d 月における日 10
F 月における曜日 2
E 曜日 Tuesday, Tue
a 午前/午後 PM
H 一日における時(0~23) 0
k 一日における時(1~24) 24
K 午前/午後の時(0~11) 0
h 午前/午後の時(1~12) 12
m 30
s 55
S ミリ秒 978
z タイムゾーン Pacific Standard Time, PST, GMT-08:00
Z タイムゾーン -0800

0 件のコメント: