`
wang_peng1
  • 浏览: 3944573 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

获得网络时间

阅读更多

转自:http://www.rgagnon.com/javadetails/java-0589.html

 

We connect to a publicly accessible time server on the internet and parse the result.

List of available time servers : http://tf.nist.gov/service/time-servers.html

NOTE : All users should ensure that their software NEVER queries a server more frequently than once every 4 seconds. Systems that exceed this rate will be refused service. In extreme cases, systems that exceed this limit may be considered as attempting a denial-of-service attack.

import java.io.*;
import java.text.*;
import java.util.*;
import java.net.*;

public final class DateUtils {
  // NIST, Boulder, Colorado  (time-a.timefreq.bldrdoc.gov)
  public static final String ATOMICTIME_SERVER="http://132.163.4.101:13";
  // NIST, Gaithersburg, Maryland (time-a.nist.gov)
  // public static final String ATOMICTIME_SERVER="http://129.6.15.28:13";
  public final static GregorianCalendar getAtomicTime() throws IOException{
    BufferedReader in = null;

    try {
       URLConnection conn = new URL(ATOMICTIME_SERVER).openConnection();
       in = new BufferedReader
         (new InputStreamReader(conn.getInputStream()));

       String atomicTime;
       while (true) {
          if ( (atomicTime = in.readLine()).indexOf("*") > -1) {
             break;
          }
       }
       System.out.println("DEBUG : " + atomicTime);
       String[] fields = atomicTime.split(" ");
       GregorianCalendar calendar = new GregorianCalendar();

       String[] date = fields[1].split("-");
       calendar.set(Calendar.YEAR, 2000 +  Integer.parseInt(date[0]));
       calendar.set(Calendar.MONTH, Integer.parseInt(date[1])-1);
       calendar.set(Calendar.DATE, Integer.parseInt(date[2]));

       // deals with the timezone and the daylight-saving-time
       TimeZone tz = TimeZone.getDefault();
       int gmt = (tz.getRawOffset() + tz.getDSTSavings()) / 3600000;
       System.out.println("DEBUG : " + gmt);

       String[] time = fields[2].split(":");
       calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time[0]) + gmt);
       calendar.set(Calendar.MINUTE, Integer.parseInt(time[1]));
       calendar.set(Calendar.SECOND, Integer.parseInt(time[2]));
       return calendar;
    }
    catch (IOException e){
       throw e;
    }
    finally {
       if (in != null) {
         in.close();
       }
    }
  }

  public static void main(String args[]) throws IOException {
    SimpleDateFormat sdf = 
        new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println("Atomic time : " + 
        sdf.format(DateUtils.getAtomicTime().getTime()));
  }

  /*
    ref : http://www.bldrdoc.gov/doc-tour/atomic_clock.html

                       49825 95-04-18 22:24:11 50 0 0 50.0 UTC(NIST) *

                       |     |        |     | | |  |      |      |
    These are the last +     |        |     | | |  |      |      |
    five digits of the       |        |     | | |  |      |      |
    Modified Julian Date     |        |     | | |  |      |      |
                             |        |     | | |  |      |      |
    Year, Month and Day <----+        |     | | |  |      |      |
                                      |     | | |  |      |      |
    Hour, minute, and second of the <-+     | | |  |      |      |
    current UTC at Greenwich.               | | |  |      |      |
                                            | | |  |      |      |
    DST - Daylight Savings Time code <------+ | |  |      |      |
    00 means standard time(ST), 50 means DST  | |  |      |      |
    99 to 51 = Now on ST, goto DST when local | |  |      |      |
    time is 2:00am, and the count is 51.      | |  |      |      |
    49 to 01 = Now on DST, goto ST when local | |  |      |      |
    time is 2:00am, and the count is 01.      | |  |      |      |
                                              | |  |      |      |
    Leap second flag is set to "1" when <-----+ |  |      |      |
    a leap second will be added on the last     |  |      |      |
    day of the current UTC month.  A value of   |  |      |      |
    "2" indicates the removal of a leap second. |  |      |      |
                                                |  |      |      |
    Health Flag.  The normal value of this    <-+  |      |      |
    flag is 0.  Positive values mean there may     |      |      |
    be an error with the transmitted time.         |      |      |
                                                   |      |      |
    The number of milliseconds ACTS is advancing <-+      |      |
    the time stamp, to account for network lag.           |      |
                                                          |      |
    Coordinated Universal Time from the National <--------+      |
    Institute of Standards & Technology.                         |
                                                                 |
    The instant the "*" appears, is the exact time. <------------+
  */
}

// thanks to TrueJavaProgrammer for the idea!

It's not possible to set your local computer clock in pure Java.

You need to use an external utility provided by the OS or call a JNI routine, see this HowTo.

分享到:
评论

相关推荐

    C++获取网络时间

    5. 将校正值应用到本地时间,得到网络时间。 这种方法更精确,但需要对NTP协议有深入理解。 在提供的`GetNetTime`文件中,很可能包含了上述方法之一的实现。文件可能包含了MFC控制台应用程序的框架,定义了网络...

    通过GPRS获得准确的网络时间

    ### 通过GPRS获得准确的网络时间的知识点详解 #### GPRS与网络时间同步 **GPRS(General Packet Radio Service)**,即通用分组无线服务技术,是一种基于GSM移动通信系统的数据承载业务,提供了端到端的、始终在线...

    C++ 获取网络时间

    在C++编程中,获取网络时间通常涉及到网络编程和时间处理。这个过程主要分为两个步骤:首先,通过Socket建立与网络时间服务器的连接;其次,发送请求并接收服务器返回的时间数据,然后将其转换为系统可识别的格式。...

    利用Baidu的HTTP服务获取互联网时间

    在IT行业中,网络时间同步是一项基础且重要的任务,特别是在分布式系统、网络安全以及各种需要精确时间戳的应用中。本文将深入探讨如何利用Baidu的HTTP服务获取互联网时间,并介绍相关技术及其实现方法。 首先,...

    得到网络标准时间

    标题“得到网络标准时间”表明我们要讨论的是如何编程实现从网络获取准确的UTC(协调世界时)时间。描述中提到的“写了一个类”,暗示我们可能是在讨论一个特定的编程语言和类库,用于实现这个功能。 获取网络时间...

    vc 获取网络时间 获取北京时间

    在VC++ MFC环境下,获取网络时间,尤其是北京时间,是编程实践中常见的需求,这主要涉及到网络编程和时间处理。下面将详细讲解如何实现这一功能。 首先,我们需要理解网络时间(NTP,Network Time Protocol)是一种...

    C#五种获取网络标准时间_已测可用

    Windows操作系统提供了一个名为`W32Time`的服务,可以通过API调用来获取网络时间。使用P/Invoke技术,我们可以直接调用`QueryPerformanceCounter`和`QueryPerformanceFrequency`这两个函数。 ```csharp ...

    Android获取网络时间

    在Android应用开发中,获取网络时间是一项常见的需求,主要用于确保应用程序中的时间信息准确无误,避免用户手动修改设备时间导致的潜在问题。本教程将详细讲解如何在Android中实现网络时间的获取,并提供相关的代码...

    GSM通过服务器或内部网络授时、获取网络时间并校正到STM32内部RTC中.rar

    用STM32F103单片机控制SIM900A模块通过连接国外的授时服务器或者访问SIM900A内部获取网络时间,把获得的时间设置到STM32内部的RTC中,实现单片机上电自动校正时间。时间在串口上显示出来。资源是完整的工程,里面...

    labview获取网络时间

    5. **显示时间**:最后,我们将解析得到的网络时间以人类可读的形式(例如日期和时间)展示出来,这可以通过LabVIEW的日期和时间函数完成。 在提供的文件“获取网络时间.vi”中,我们可以看到这样的一个工作流程。...

    时间敏感网络(TSN)产业白皮书

    本白皮书旨在促进业界对工业互联网场景下的时间敏感网络技术的网络架构、技术趋势达成广泛共识,为工业互联网网络时间敏感网络的技术创新、试验验证、应用实践等提供参考和引导,共同推动工业互联网时间敏感网络技术...

    小波神经网络的时间序列预测代码,基于神经网络的时间序列预测,Python

    小波神经网络是一种将小波分析与神经网络相结合的预测模型,特别适合处理时间序列数据。在本项目中,我们关注的是如何利用Python实现小波神经网络进行时间序列预测。时间序列预测是一种统计方法,用于根据历史数据...

    网络对时代码 用于将本地系统时间与网络时间一致

    本主题主要探讨的是如何通过编程实现本地系统时间与网络时间服务器同步的过程。 首先,我们需要理解网络对时协议(NTP, Network Time Protocol)。NTP是一种用于同步网络中不同计算机时间的协议,由David L. Mills...

    系统时间跟网络时间同步

    首先,系统时间是指计算机内部时钟所记录的时间,而网络时间则是通过网络与全球定位系统(GPS)或网络时间协议(NTP)服务器进行同步得到的标准世界协调时间(UTC)。当系统时间与网络时间出现偏差时,可能导致各种...

    C#获取网络标准时间

    在C#中,我们可以使用System.Net命名空间中的WebClient类来从网络获取资源,包括时间服务器的NTP(网络时间协议)响应。以下是一个简单的C#代码示例,展示了如何实现这个功能: ```csharp using System; using ...

    易语言取网络时间,标准时间,北京时间,国家授时中心时间

    通过解析这个数据包,可以得到精确的网络时间,并转换为易语言可以理解的日期和时间格式。 "标准时间"通常指的是UTC时间,它是基于原子钟的精确计时,是世界各地时间的参考标准。在易语言中,获取标准时间的步骤与...

    获取网络时间的软件源码

    根据提供的文件信息,本文将详细解析“获取网络时间的软件源码”这一主题涉及的关键知识点。主要内容包括:网络时间的概念、Visual Basic (VB) 编程语言基础、使用 VB 获取网络时间的具体实现方法以及源代码分析。 ...

Global site tag (gtag.js) - Google Analytics