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
生成连接对象并建立连接,只需要建立连接就可以了,不需要 Request
与 Response
,所以比单独写接口效率要高。
接着再把它转为标准时间对象,并按照所需的格式进行转换,因为我的项目只需面向国内的用户,所以用 Locale.CHINA
把它设定为北京时间。
最后再把时间对象转换成字符串就可以了。