問題
時間のデータ型項目はTimeクラスのインスタンスなので、Timeクラスは時間をHH:mm
フォーマットのStringに変換する関数持ってないため、工夫しないといけません。
例:
以下のコードで無理やり直接GMTのStringに変換すると
String str = String.valueOfGmt(p.StartTime__c);
以下のエラーが発生されました。
Method does not exist or incorrect signature: void valueOfGmt(Time) from the type String
ただ、StringのvalueOf
で変換はできましたが、正規表現でStringを切り取らないといけません。
String str = String.valueOf(p.StartTime__c);
// 結果
// 10:00:00.000Z
解決
正規表現を使わず、一番適切な方法のステップは以下のようになります。
-
DateTime.now()
で新規DateTimeを作成して - 更に、
DateTime.newInstanceGmt
で時間を上記の時間の値に置き換える -
String.formatGMT('HH:mm')
で変換する
例:
DateTime b = DateTime.now();
b = DateTime.newInstanceGmt(b.year(), b.month(), b.day(), p.StartTime__c.hour(), p.StartTime__c.minute(), 0);
String timeStr = b.formatGMT('HH:mm');
// 結果
// 10:00
ユースケース
- 時間のデータ型をJSON化する時に使えます。
- ローカル時間で表示させる際に使えます。
もし他のやり方があれば、ぜひコメントをお願いします!