I am making an app in which I want to get the current time from internet.
I know how to get the time from the device using System.currentTimeMillis
, and even after searching a lot, I did not get any clue about how to get it from internet.
I am making an app in which I want to get the current time from internet.
I know how to get the time from the device using System.currentTimeMillis
, and even after searching a lot, I did not get any clue about how to get it from internet.
I think the best solution is to use SNTP, in particular the SNTP client code from Android itself, e.g.: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/net/SntpClient.java/
I believe Android uses SNTP for automatic date/time updates when a cell network is not available (e.g. wifi tablets).
I think it is better then the other solutions because it uses SNTP/NTP rather then the Time protocol (RFC 868) used by the Apache TimeTCPClient. I don't know anything bad about RFC 868, but NTP is newer and seems to have superceeded it and is more widely used. I believe that Android devices that don't have cellular uses NTP.
Also, because it uses sockets. Some of the solutions proposed use HTTP so they will lose something in their accuracy.
You will need to have access to a webservice that provides current time in XML or JSON format.
If you don't find such type of service, you could parse the time from a web page, like http://www.timeanddate.com/worldclock/, or host your own time service on a server using a simple PHP page for example.
Check out JSoup for the parsing of HTML pages.
Here is a method that i have created for you you can use this in your code
If you don't care for millisecond accuracy, and if you are already using google firebase or don't mind using it (they provide a free tier), check this out: https://firebase.google.com/docs/database/android/offline-capabilities#clock-skew
Basically, firebase database has a field that provides offset value between the device time and the firebase server time. You can use this offset to get the current time.
As I said, it will be inaccurate based on network latency.
Nothing from the above worked from me. This is what I ended up with (with Volley);
This example also converts to another timezone.
Import Volley in gradle:
You can get time from internet time servers using the below program
1.You would need Apache Commons Net library for this to work. Download the library and add to your project build path.
(Or you can also use the trimmed Apache Commons Net Library here : https://www.dropbox.com/s/bjxjv7phkb8xfhh/commons-net-3.1.jar. This is enough to get time from internet )
2.Run the program. You will get the time printed on your console.