System.currentTimeMillis()返回UTC时间?
我想以毫秒为单位获得当前的UTC时间。 我search谷歌,得到一些答案System.currentTimeMillis()确实返回UTC时间。 但事实并非如此。 如果我这样做:
long t1 = System.currentTimeMillis(); long t2 = new Date().getTime(); long t3 = Calendar.getInstance().getTimeInMillis();
所有三次几乎相同(由于通话,差值以毫秒为单位)。
t1 = 1372060916 t2 = 1372060917 t3 = 1372060918
这次不是UTC时间,而是这是我的时区时间。 我怎样才能得到当前的UTC时间在Android?
你显示的所有三行将给出自unix时期以来的毫秒数,这是一个固定的时间点,不受当地时区的影响。
你说“这次不是UTC时间” – 我怀疑你实际上诊断错误。 我会build议使用epochconverter.com 。 例如,在你的例子中:
1372060916 = Mon, 24 Jun 2013 08:01:56 GMT
我们不知道什么时候产生了这个值,但除非实际上是UTC时间上午8:01,否则这是系统时钟的问题。
System.currentTimeMillis
和Date
的值都不受时区的影响。 但是,您应该意识到Date.toString()
确实使用了本地时区,它误导了许多开发人员认为Date
与时区固有关联 – 不是,只是一个瞬间,没有关联的时间区域甚至日历系统。
我可以确认,所有三个调用可能取决于当地时间,考虑到时代,而不是Date.toString()
或任何类似的方法。 我已经看到他们依靠当地时间在运行Android 2.3的特定设备。 我没有testing过其他设备和Android版本。 在这种情况下,本地时间是手动设置的。
获得独立UTC时间的唯一可靠方法是使用GPS_PROVIDER
请求位置更新。 从NETWORK_PROVIDER
检索的位置的getTime()
值也取决于本地时间。 另一种select是ping一个返回UTC时间戳的服务器。
所以,我做的是以下几点:
public static String getUTCstring(Location location) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); String date = sdf.format(new Date(location.getTime())); // Append the string "UTC" to the date if(!date.contains("UTC")) { date += " UTC"; } return date; }
- 多个button的OnClickListener()机器人
- AsyncTask:doInBackground()的返回值在哪里去?
- Android模拟器垃圾logcat与“服务com.android.exchange.ExchangeService已经泄露了ServiceConnection …这是最初绑定在这里
- getApplicationContext(),getBaseContext(),getApplication(),getParent()
- 在到达收件箱之前,我们可以在Android中删除短信吗?
- 创build一个Android智能应用程序横幅
- 尝试在Android中创build文件:打开失败:EROFS(只读文件系统)
- 问题解组的问题
- Android TYPE_LINEAR_ACCELERATION传感器 – 它显示了什么?