一、返回的是毫秒
System.currentTimeMillis()函数是Java中一个返回当前时间的函数,这个时间是从1970年1月1日00:00:00 GMT开始的毫秒数。因此,该函数返回的是毫秒数而不是秒数。
long timeInMillis = System.currentTimeMillis(); System.out.println("当前时间:" + timeInMillis + "毫秒");
上述代码会输出当前时间的毫秒数。
而且,在Java中有许多与时间相关的类和方法都是以毫秒为单位的,比如Thread.sleep()方法的参数就是毫秒数。
try { // 暂停当前线程2秒钟 Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); }
上述代码会使得当前线程暂停2秒钟。
二、与大数字的处理
毫秒数可以很好地处理大数字,例如处理日期时间转换时会使用到毫秒数,在某些系统中,时间的精度更高需要使用到纳秒级别的时间。使用毫秒可以很好地解决这个问题。
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); String dateString = formatter.format(new Date(timeInMillis)); System.out.println(dateString);
上面的代码可以将当前时间转换成指定格式的字符串。
三、多线程下的时间同步问题
在多线程环境下,使用System.currentTimeMillis()的时候需要注意线程的同步问题。由于每个线程都有自己的上下文,因此在线程上下文切换时,如果另一个线程更新了时间,那么获取的时间就可能会不准确。
为了解决这个问题,我们可以使用ThreadLocal来存储每个线程的毫秒数,从而避免在不同线程之间发生时间同步冲突的问题。
private static final ThreadLocal<Long> threadLocal = new ThreadLocal<Long>(){ @Override protected Long initialValue() { return System.currentTimeMillis(); } }; long timeInMillis = threadLocal.get();
上面的代码使用了ThreadLocal来避免多线程中使用System.currentTimeMillis()发生的时间同步问题。
四、时间的比较
我们可以使用毫秒数来比较两个时间的先后顺序,比如判断一个时间是否在另一个时间之前、之后还是同时。我们可以将时间转换成毫秒数进行比较,这种方式比较简单、高效。
long startTime = System.currentTimeMillis(); // 执行一些操作 long endTime = System.currentTimeMillis(); if (endTime < startTime) { System.out.println("结束时间早于起始时间"); } else if (endTime > startTime) { System.out.println("结束时间晚于起始时间"); } else { System.out.println("开始时间和结束时间相同"); }
上述代码可以比较两个时间的先后顺序。
五、时间的加减计算
我们可以使用毫秒数进行时间的加减计算,非常方便。
long timeInMillis = System.currentTimeMillis(); // 加上5分钟 timeInMillis += 5 * 60 * 1000; System.out.println("5分钟后:" + new Date(timeInMillis)); // 减去10秒钟 timeInMillis -= 10 * 1000; System.out.println("10秒钟前:" + new Date(timeInMillis));
上述代码可以对当前时间进行加减计算。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/159735.html