Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Get NTP Time (and Extras)

0.00/5 (No votes)
28 Jan 2020 1  
A quick Function to get UTC / NTP time

Introduction

This function will make it easy to get 15 pieces of information about date and time from the internet concerning the computer location requesting it. It will return JSON or plain Text. Can be used for something as simple as checking the local computer time for accuracy or any other reason that the computer time, might not be enough.

Background

I needed this information for a program I wrote, and saw other articles in locations that did not give enough information to do it or took a bit more to do it and received less. This is straight forward and easy to use.

Using the Code

I am including two functions for this. One is just a support and if you have another method to get the local IP (public) or if you want a JSON return, you can leave out FN_GETIP and " + MY_IP + ".txt". You will also need to adjust the TIME_IN variable to handle a JSON data return as well as the rest of the parsing area. To keep it simple and clear, I think the string return is the best way to display this.

To CALL the function, you create a multi- element variable.

//
// DIM I_TIME() AS STRING = fn_NTPTIME()
//

When run, I_TIME() will have 15 elements in it. If you only need the date and time, you only need element at index #2. (element 3) (See list below). Here are both functions.

// 
Public Function fn_NTPTIME() As String()
    'Created by Doug_Strkyer
        Dim Time_IN as string
        Dim TIME_DATA() As String
        Dim client As New System.Net.WebClient
        Dim MY_IP As String = fn_GETIP()
        Dim Time_request As String = "http://worldtimeapi.org/api/ip/" + MY_IP + ".txt"
        Time_in = client.DownloadString(Time_request)
        TIME_DATA = Split(Time_IN, Chr(10))
        Return TIME_DATA
End Function

Public Function fn_GETIP() As String
        Dim MY_IP As String
        Dim client As New System.Net.WebClient
        MY_IP = client.DownloadString("https://api.ipify.org")
        Return MY_IP
End Function
// 
//

Here is a printout from debug as to the elements in I_TIME() will be. I have added the "ITEM # =" just for clarity of the index. Item 1 will contain the public address of the requestor.

ITEM 0 = abbreviation: CST
ITEM 1 = client_ip: ###.###.###.###
ITEM 2 = datetime: 2020-01-27T19:57:43.223214-06:00
ITEM 3 = day_of_week: 1
ITEM 4 = day_of_year: 27
ITEM 5 = dst: false
ITEM 6 = dst_from: 
ITEM 7 = dst_offset: 0
ITEM 8 = dst_until: 
ITEM 9 = raw_offset: -21600
ITEM 10 = timezone: America/Chicago
ITEM 11 = unixtime: 1580176663
ITEM 12 = utc_datetime: 2020-01-28T01:57:43.223214+00:00
ITEM 13 = utc_offset: -06:00
ITEM 14 = week_number: 5

Here is a some quick code to show in debug, the above information. Just create a project and past this and the 2 functions on the main form. I know, I should have changed the form name to something useful.

// 
 Private Sub Form1_Load(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles MyBase.Load
        Dim I_TIME() As String = fn_NTPTIME()
        Dim INFO As String
        For I = 0 To UBound(I_TIME)
            INFO = "ITEM " + I.ToString + " = " + I_TIME(I)
            Debug.Print(INFO)
        Next
    End Sub
// 
//

Points of Interest

I know there are a couple of lines of that which could be combined, however I did not do so for clarity.

In Item 2 and Item 12, the date and time are separated by a "T". This is not my doing, I am posting the raw data, except in array form. It is returned to TIME_IN as a single string.

While I have been coding for many years, this is my first full submission. Let me know what you think.

History

  • 27th January, 2020 - First submitted

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here