はじめに
あるテーブルのデータをエクセルに貼り付けて調査をしていた時に、UTC時刻で登録されており分かりにくかったためJST時刻へ変換しました。
関数とVBAでのやり方を残したいと思います。
関数
=DATEVALUE(MIDB(A1,1,10))+TIMEVALUE(MIDB(A1,12,8))+TIME(9,0,0)
A1にUTC時刻の文字列が入力されている場合の関数です。
必要に応じて「A1]部分を変更してください。
以下のような仕組みです。
- 日付部分を日付として取得する(DATEVALUE(MIDB(A1,1,10)))
- 時刻部分を時刻として取得する(TIMEVALUE(MIDB(A1,12,8)))
- 時刻を+9加算する
- 日付に時刻を加算する
B2のように、日付を跨ぐ場合でもしっかりと変換されています。
VBA
'UTC時刻の文字列をJTC時刻へ変換してDate型で返す
'
'@param utc UTC時刻の文字列
'@return jtcDateTime Date型のJTC時刻
Function ConvertUTCToJTC(ByVal utc As String) As Date
Dim utcDate As String
utcDate = Left(utc, 10)
Dim utcTime As String
utcTime = Mid(utc, 12, 8)
Dim jtcDateTime As Date
jtcDateTime = utcDate & " " & utcTime
jtcDateTime = DateAdd("h", 9, jtcDateTime)
ConvertUTCToJTC = jtcDateTime
End Function
実行サンプル
Sub ConvertUTCToJTCTest()
Debug.Print ConvertUTCToJTC("2021-08-10T10:00:00Z")
Debug.Print ConvertUTCToJTC("2021-08-10T22:00:00Z")
End Sub
実行サンプル結果
2021/08/10 19:00:00
2021/08/11 7:00:00
引数の文字列型のUTC時刻をJTC時刻へ変換してDate型で返します。
関数とほぼ同じ仕組みです。
- 日付部分を文字列で取得する
- 時刻部分を文字列で取得する
- 1と2で取得した日時からDate型の値を作成する
- 3で作成したDate型に9時間加算する