System.currentTimeMillis() 和 calendar.getTimeInMillis() 是一样的么
时间: 2023-10-25 13:33:05 浏览: 41
不完全相同。`System.currentTimeMillis()` 返回当前时间的毫秒数,以自协调世界时(UTC)1970年1月1日午夜开始的时间为基准。它是一个静态方法,直接返回当前时间。
`calendar.getTimeInMillis()` 是 `Calendar` 类的一个方法,它返回给定 `Calendar` 对象的时间值,以自协调世界时(UTC)1970年1月1日午夜开始的时间为基准。它需要你先创建一个 `Calendar` 对象,并设置其时间值,然后才能调用该方法。
总的来说,它们都可以用来获取当前时间的毫秒数,但是使用方式和实现细节有所不同。
相关问题
Android Settings.System设置系统时间
要设置Android系统的时间,可以通过以下代码:
```java
long timeMillis = System.currentTimeMillis();
Settings.System.putInt(getContentResolver(), Settings.System.AUTO_TIME,0);
Settings.System.putIntContentResolver(), Settings.System.AUTO_TIME_ZONE, 0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME, 0);
Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME_ZONE, 0);
}
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timeMillis);
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
long when = calendar.getTimeInMillis();
if (when / 1000 < Integer.MAX_VALUE) {
SystemClock.setCurrentTimeMillis(when);
}
```
其中,`year`是要设置的年份,`month`是要设置的月份(从0开始,0代表1月),`day`是要设置的日份,`hour`是要设置的小时数,`minute`是要设置的分钟数。
需要注意的是,这个操作需要`android.permission.SET_TIME`权限。另外,`AUTO_TIME`和`AUTO_TIME_ZONE`设置为0表示关闭自动更新时间和时区的功能。为了避免安全问题,这两个设置在Android 6.0及以上版本需要在系统设置中手动开启。
rightNow.getTimeInMillis()做减法
`rightNow.getTimeInMillis()` 返回当前时间的毫秒数,我们可以利用这个方法来进行时间的计算。
如果要计算两个时间之间的时间差,可以将两个时间的毫秒数相减。例如:
```
Calendar rightNow = Calendar.getInstance();
long currentTimeMillis = rightNow.getTimeInMillis(); // 获取当前时间的毫秒数
// 假设有一个时间戳为 1612345678900 的时间
long timestamp = 1612345678900L;
long diff = currentTimeMillis - timestamp; // 计算当前时间与指定时间的毫秒差
System.out.println("距离指定时间已过去:" + diff / 1000 + "秒"); // 将毫秒转换为秒并输出
```
上述代码中,我们获取了当前时间的毫秒数,并假设有一个时间戳为 `1612345678900` 的时间。然后通过计算两个时间的毫秒差,得到距离指定时间已经过去的秒数,并最终输出结果。需要注意的是,因为 `rightNow.getTimeInMillis()` 和时间戳都是毫秒级别的精度,所以需要将毫秒数除以1000来将其转换为秒。