关闭

获取网络时间(国家标准时间)

标签: java
26468人阅读 评论(4) 收藏 举报
分类:

我们在开发中,很多应用需要读取网络时间来作为一个时间的标准,对业务逻辑进行相对可靠的校验。
下面是Java中(Android一样)读取网络时间的代码:

package com.test;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

/**
 * 读取网络时间
 *
 * @author SHANHY(365384722@QQ.COM)
 * @date   2015年11月27日
 */
public class GetNetworkTime {

    public static void main(String[] args) {
        String webUrl1 = "http://www.bjtime.cn";//bjTime
        String webUrl2 = "http://www.baidu.com";//百度
        String webUrl3 = "http://www.taobao.com";//淘宝
        String webUrl4 = "http://www.ntsc.ac.cn";//中国科学院国家授时中心
        String webUrl5 = "http://www.360.cn";//360
        String webUrl6 = "http://www.beijing-time.org";//beijing-time
        System.out.println(getWebsiteDatetime(webUrl1) + " [bjtime]");
        System.out.println(getWebsiteDatetime(webUrl2) + " [百度]");
        System.out.println(getWebsiteDatetime(webUrl3) + " [淘宝]");
        System.out.println(getWebsiteDatetime(webUrl4) + " [中国科学院国家授时中心]");
        System.out.println(getWebsiteDatetime(webUrl5) + " [360安全卫士]");
        System.out.println(getWebsiteDatetime(webUrl6) + " [beijing-time]");
    }

    /**
     * 获取指定网站的日期时间
     * 
     * @param webUrl
     * @return
     * @author SHANHY
     * @date   2015年11月27日
     */
    private static String getWebsiteDatetime(String webUrl){
        try {
            URL url = new URL(webUrl);// 取得资源对象
            URLConnection uc = url.openConnection();// 生成连接对象
            uc.connect();// 发出连接
            long ld = uc.getDate();// 读取网站日期时间
            Date date = new Date(ld);// 转换为标准时间对象
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);// 输出北京时间
            return sdf.format(date);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

网络上很多帖子差不多都说使用 www.bjtime.cn 来获取网络时间,但是通过我的实际测试(测试时间2015-11-27 23:50),此时这个 bjtime 的时间并不准,与北京时间竟然悬殊了十几秒,显然降低了可靠性。
大家看下我测试输出的结果便一目了然,如下:

2015-11-27 23:51:37 [bjtime]
2015-11-27 23:50:22 [百度]
2015-11-27 23:50:22 [淘宝]
2015-11-27 23:50:22 [中国科学院国家授时中心]
2015-11-27 23:50:22 [360安全卫士]
2015-11-27 23:50:22 [beijing-time]

显而易见,几个知名互联网公司的时间是一致的,所以获取网络时间的时候,建议大家选用相对比较靠谱的网站,上面测试的几个已经足够备选了(百度、淘宝、国家授时中心)。

另外值得一提的是,该方法获取时间,只需要建立连接就可以了,不需要请求(request)与响应(response),所以比单独写接口效率要高。

8
2
查看评论

Android - 获取系统时间和网络时间

Android - 获取系统时间和网络时间
  • mythmayor
  • mythmayor
  • 2017-06-06 18:08
  • 3506

Java 获取本地时间与网络时间

Java获取的时间分为本地时间和网络时间,一般情况下开发中获取的都是本地时间,但是有些情况也需要我们去获取网络时间,以校验时间的准确性。 下面我会分别介绍获取本地时间和网络时间的方法:获取本地时间 通过Calendar类获取 int year, month, day, week, hh; ...
  • waa_0618
  • waa_0618
  • 2017-01-17 10:57
  • 4242

获取网络时间(国家标准时间)

我们在开发中,很多应用需要读取网络时间来作为一个时间的标准,对业务逻辑进行相对可靠的校验。 下面是Java中(Android一样)读取网络时间的代码:package com.test;import java.io.IOException; import java.net.MalformedURLE...
  • catoop
  • catoop
  • 2015-11-27 23:45
  • 26468

C#获取网络日期时间

【1】获取网络日期时间 /// /// 获取网络日期时间 /// /// public static string GetNetDateTime() { WebRequest ...
  • a0051
  • a0051
  • 2017-04-16 21:02
  • 3058

获取网络时间、获取特定时区时间、时间同步GMT UTC

<div class="markdown_views"><p><strong>方法一:</strong></p> SimpleDateFormat dff = new SimpleDateFormat("yyy...
  • xiong9999
  • xiong9999
  • 2017-03-02 10:35
  • 2436

C#—获取网络时间

1、方法定义 /// /// 获取网络日期时间 /// /// public static string GetNetDateTime() { WebRequest re...
  • a1373973
  • a1373973
  • 2017-06-05 14:49
  • 637

获取网络时间

获取网络时间方法一:ping百度等服务器,获取时间QNetworkAccessManager manager; void CNetwork::verifyTime() { QNetworkRequest request(QUrl(http://open.baidu.com/special/t...
  • jin_huan11
  • jin_huan11
  • 2016-05-30 14:11
  • 2307

多方法获取网络时间

在做YH维护的时候,偶尔会碰到这样的问题:电脑的非正常关机导致系统时间出错(变为了2002-1-1),从而影响到项目系统的使用。尤其是设计到money的系统,如果时间错误,可能会导致无法想象的后果。所以我们可能需要用系统和网络的双重验证。      ...
  • xiaoxian8023
  • xiaoxian8023
  • 2012-02-11 12:31
  • 20728

自动获取网络时间

  • 2008-08-25 10:58
  • 151KB
  • 下载

获取网络时间

这两天有一个应用需要获取网络时间,虽然一直知道可以从时间服务器获取时间,却从来也没有操作过,借这个机会重新进行一下深入了了解。 基本的思路就是:通过SOCKET连接时间服务器,直接接收从服务器发送的过来的时间数据。 void GetNetTime() { TIME_ZONE_INFORMA...
  • skywalker_leo
  • skywalker_leo
  • 2014-10-15 10:52
  • 7432
    个人资料
    • 访问:4426015次
    • 积分:24203
    • 等级:
    • 排名:第328名
    • 原创:246篇
    • 转载:35篇
    • 译文:8篇
    • 评论:1069条
    博客专栏
    最新评论