UTC(協定世界時)日時値を表す文字列、例えば「20150731055917.000000-000」を日本の標準時(JST)に直した上で日付型のデータに変換するユーザー定義関数を覚書。
例えば「20150731055917.000000-000」を日本の標準時に直す場合UTC日時 + 9時間なので実際には、2015/7/31 14:59:17になる。
WMIオブジェクトを使ったプログラムを作った時に作ったユーザー定義関数で、せっかくだから覚書きしておきます。
UTC日時値を標準時間に直して日付型に変換するプログラムの概要
UTC日時が何であるかとか、今回の逆のパターン(標準時間をUTC日時値に変換)については、以下の記事を参考にしてください。
今回作成するサンプルプログラムは、以下の記事を応用したものです。
処理の考え方は以下のとおり。
UTC日時値を表す文字列を文字列操作関数を使用して年、月、日、時、分、秒にバラして用意しておいた変数に代入する。
年、月、日、時、分、秒が代入された変数を日付の区切り"/"と時刻の区切り":"と結合して日本の日付時刻表示形式の文字列に作り直す。
作り直した文字列をCDate関数を使って日付型に変換する。
日付型に変換された値に9時間加算する。
※UTC日時を日本の標準時間に直す場合は単純に9時間加算すれば良いだけです。
UTC日時値を標準時間に直して日付型に変換するVBAサンプルプログラム
何度も使われる場合を考えてユーザー定義関数として作成しています。
Function UTCtoJST(strUTCDate As String) As Date
Dim strYear As String, strMonth As String
Dim strDay As String, strHour As String, strMinute As String
Dim strSec As String, JSTDateTime As Date
'引数として受け取った日付時刻文字列(YYYYMMDDHHMMSS)を
'年、月、日、時、分、秒にバラして各変数に代入
strYear = Left(strUTCDate, 4)
strMonth = Mid(strUTCDate, 5, 2)
strDay = Mid(strUTCDate, 7, 2)
strHour = Mid(strUTCDate, 9, 2)
strMinute = Mid(strUTCDate, 11, 2)
strSec = Mid(strUTCDate, 13, 2)
'分解したものをYYYY/MM/DD HH:MM:SSに作り変えて日付型に変換する
JSTDateTime = CDate(strYear & "/" & strMonth & "/" & strDay _
& " " & strHour & ":" & strMinute & ":" & strSec)
'UTC日時値に9時間加算して日本の標準時に直した値を返す
UTCtoJST = JSTDateTime + TimeValue("9:00:00")
End Function
作成したユーザー定義関数の使用例
以下にVBAのプログラムの中で上記ユーザー定義関数を呼び出して使用するサンプルプログラムを記載します。
Sub CallUTCtoJST()
Dim temp As Date
temp = UTCtoJST("20150731055917.000000-000")
MsgBox temp
End Sub
UTC日時値を日本の標準時に変換するVBAのサンプルプログラムまとめ
今回紹介したサンプルプログラムは、別の記事で作成したサンプルプログラムの処理の中で単に9時間加算しているだけです。
その記事の中に含めてしまおうかとも思ったけれど、探しにくくなると嫌なので単独の記事として作成しました。
Excelであればワークシート関数としても使えます。
もちろんAccessのクエリーの式に指定して使うこともできます。
連続してUTC日時値がらみの記事を書いたのは、別記事として書く予定のWindowsのイベントログをExcelとかAccessに出力するプログラムで使ったためです。
そっちに全部載せると長くなって読みづらいし、メインの内容が薄れてしまうので...
コメント