Excel - VBA

표준시간을 얻어 오는 함수

EGTools 2023. 3. 27. 13:04
728x90

제품의 유효기간을 설정할 때에 PC에 있는 시간이 아닌

인터넷 상의 Time Service를 이용하여 날짜/시간 확인이 필요한 경우

API를 이용하여 확인이 가능합니다.

 

아래처럼 브라우저의 URL를 입력해 보면 현재 시간을 알 수 있습니다.

http://worldtimeapi.org/timezone/Asia/Seoul

 

 

이걸 함수에서 사용할 수 있도록 API 주소를 아래와 같이 적용합니다.

http://worldtimeapi.org/api/timezone/Asia/Seoul

 

조회 결과는 json으로 아래처럼 접수됩니다.

{"abbreviation":"KST","client_ip":"000.000.000.000","datetime":"2023-03-27T12:50:33.717783+09:00","day_of_week":1,"day_of_year":86,"dst":false,"dst_from":null,"dst_offset":0,"dst_until":null,"raw_offset":32400,"timezone":"Asia/Seoul","unixtime":1679889033,"utc_datetime":"2023-03-27T03:50:33.717783+00:00","utc_offset":"+09:00","week_number":13}

이 중에서 "datetime":"2023-03-27T12:50:33.717783+09:00" 부분을 쪼개서 시간으로 만들어 반환합니다.

함수 이름은 서울표준시이므로 SeoulTime으로 합니다.

Public Function SeoulTime() As Variant
    Dim rt As String
    Const ServiceUrl As String = "http://worldtimeapi.org/api/timezone/Asia/Seoul"
    
    On Error GoTo ERR_EXIT
    
    With CreateObject("MSXML2.XMLHTTP.6.0")
        .Open "GET", ServiceUrl, False
        .send
        rt = .ResponseText
    End With
  
    If InStr(1, rt, "utc_datetime", vbTextCompare) = 0 Then GoTo ERR_EXIT
    rt = Left(rt, InStr(1, rt, "day_of_week", vbTextCompare) - 4)
    rt = Mid(rt, InStr(1, rt, "DateTime", vbTextCompare) + 11)
    SeoulTime = CDate(Replace(Mid(rt, 1, InStrRev(rt, ".") - 1), "T", " "))

    Exit Function
  
ERR_EXIT:
    SeoulTime = False
  
End Function

 

728x90