Office関連

日本標準時(JST)を取得するVBAマクロ

先日、もり(@moripro3)さんのツイートに対して下記のような返信をしたので、例として簡単なサンプル用のコードを書くことにしました。

NICTが公開しているAPIを使って、日本標準時(NHKや時報で使われている、いわゆる日本時間)を取得するVBAマクロです。
(以前どこかで書いたような気もするのですが、見つからなかったので新しく書き直しました。)

Option Explicit

Public Sub Sample()
  Dim dt As Date
  
  dt = GetJST()
  If dt = CDate(0) Then Exit Sub
  MsgBox "現在の時刻は [" & Format(dt, "yyyy年m月d日 h時n分s秒") & "] です。", _
         vbInformation + vbSystemModal, _
         "日本標準時"
End Sub

Private Function GetJST() As Date
'NICTのサーバーから日本標準時取得
'※同一IPからのアクセスは1秒以上の間隔を空けること
' http://www.nict.go.jp/JST/http.html
  Dim js As String
  Dim d As Object, elm As Object
  Dim dt As Date
  Const api_url As String = "https://ntp-a1.nict.go.jp/cgi-bin/json"
  
  On Error Resume Next 'エラー処理は手抜き
  'JSON取得
  With CreateObject("WinHttp.WinHttpRequest.5.1")
    .Open "GET", api_url, False
    .Send
    Select Case .Status
      Case 200: js = .ResponseText
      Case Else: GoTo Fin
    End Select
  End With
  
  'JSONから日時取得
  If Len(Trim(js)) < 1 Then GoTo Fin
  js = "(" & js & ")" '丸括弧で囲んでeval
  Set d = CreateObject("htmlfile")
  Set elm = d.createElement("span")
  elm.setAttribute "id", "result"
  d.appendChild elm
  d.parentWindow.execScript "document.getElementById('result').innerText = new Date(eval(" & js & ").st * 1000).toLocaleString();"
  If IsDate(elm.innerText) = True Then dt = CDate(elm.innerText)
  If Err.Number <> 0 Then GoTo Fin
  On Error GoTo 0
  
Fin:
  GetJST = dt
End Function

仕組みは単純で、

APIからJSON取得

JSONからサーバー時刻を抜き出し

日付(Date)型として時刻取得

といった作業を行っています。
注意点としては、APIのガイドラインページにある通り、同一IPから連続してアクセスする場合、1秒以上の間隔を空ける必要があることです。

サーバーから日時を取得する方法としては、上記以外にも、例えば下記サイトで紹介されているような、サーバーのレスポンスヘッダー(Date)を使う方法もありますので、そのあたりはお好みで処理すれば良いかと思います。

関連記事

  1. アイコン一覧

    Office 365アイコン(imageMso)一覧(D)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  2. Office関連

    Adobe Readerを利用してPDFファイルのページ数を取得するVBAマクロ

    mougの回答用に書いたコードです。mougは半年でログが消えてし…

  3. Office アドイン

    [Office用アプリ]野良アプリのススメ

    「Office 用アプリの概要」にもある通り、Office用アプリを公…

  4. Office関連

    Officeの新製品発売記念イベントに参加してきました。

    今月16日に開催された、Officeの新しい製品の発売記念イベント「平…

  5. Office アドイン

    [Office用アプリ]JavaScript API for Office ライブラリ v1.1

    2014/01/24 追加記事を書きました。・JavaScript…

コメント

  • コメント (1)

  • トラックバックは利用できません。

    • たふあひ
    • 2020年 6月 21日

    会社でExcelタイムカードの自作を行おうと考えて色々調べていましたが、このページの標準時の記載内容はとても参考になりました。ありがとうございます。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP