Android 项目中需要获取网络时间以确保消费信息的准确性,查了一下,发现 Java 给我们提供了相应的方法,能让我们简单地通过几行代码就能够获取到网络时间:

URL url = new URL("https://cn.bing.com");       // 从 Bing 取得资源对象
URLConnection urlConnection = url.openConnection();     // 生成连接对象
urlConnection.connect();        // 发出连接
Date date = new Date(urlConnection.getDate());      // 取得网站日期时间并转换为标准时间对象
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);       // 设定日期时间格式并设为北京时间
String dateString = formatter.format(date);     // 转换日期时间格式
Log.i("TIME", dateString);

首先从 Bing 中获取资源对象,至于为什么选 Bing,首先网上大多数教程都选用久久时间网来连接的,但是有技术博客提到,其时间并不准确,可靠性较低,然后我改用中国科学院国家授时中心来进行连接,毕竟 Windows 7 时代我还使用过它来更新 PC 的本地时间呢。

但在测试中却出乎意料的发现,中科院国家授时中心的时间却比实际时间快了几分钟,并不知道原因,赶紧弃坑!

于是就转战一些互联网巨头的网站吧,至少服务器稳定可靠,首先想到的是 Google,这明显就不现实嘛,这不是要等到用户连接超时吗!所以最后才选择了 Bing

取得资源对象后,通过 URLConnection 生成连接对象并建立连接,只需要建立连接就可以了,不需要 RequestResponse,所以比单独写接口效率要高。

接着再把它转为标准时间对象,并按照所需的格式进行转换,因为我的项目只需面向国内的用户,所以用 Locale.CHINA 把它设定为北京时间。

最后再把时间对象转换成字符串就可以了。