vlambda博客
学习文章列表

Java中获取时间戳

在JAVA中获取时间戳有三种方式,推荐使用System类来获取时间戳,下面一起来看看三种方式。

1、System.currentTimeMillis()

System类中的currentTimeMillis()方法是三种方式中效率最好的,运行时间最短。开发中如果设计到效率问题,推荐使用此种方式获取。

System.currentTimeMillis()

2、new Date().getTime()

除了System类,使用量很大的应该就是Date类了,包括我也一样开发中如果涉及到日期的首先会想到Date,但date类中获取时间戳并不是最有效率的,翻看他的源码:

无参构造如下:

public Date() { this(System.currentTimeMillis());}

从源码可以看出,new Date()其实就是调用了System.currentTimeMillis(),再传入自己的有参构造函数。不难看出,如果只是仅仅获取时间戳,即使是匿名的new Date()对象也会有些许的性能消耗, 从提升性能的角度来看,只是仅仅获取时间戳,不考虑时区的影响(时区为什么会有影响看下一段),直接调用System.currentTimeMillis()会更好一些。

3、Calendar.getInstance().getTimeInMillis()

这种方式其实是速度最慢,看其源码就会发现,Canlendar是区分时区的,因为要处理时区问题会耗费很多的时间。

测试如下:

public class TimeTest { static long TEN_THOUSAND = 10000;
public static void main(String[] args) { long times = TEN_THOUSAND * 1000; long t1 = System.currentTimeMillis(); testSystem(times); long t2 = System.currentTimeMillis(); System.out.println("耗时:" + (t2 - t1) + "ms"); testCalendar(times); long t3 = System.currentTimeMillis(); System.out.println("耗时:" + (t3 - t2) + "ms"); testDate(times); long t4 = System.currentTimeMillis(); System.out.println("耗时:" + (t4 - t3) + "ms");
}
private static void testSystem(long times) { for (int i = 0; i < times; i++) { long currentTime = System.currentTimeMillis(); } }
public static void testCalendar(long times) { for (int i = 0; i < times; i++) { long currentTime = Calendar.getInstance().getTimeInMillis(); } }
public static void testDate(long times) { for (int i = 0; i < times; i++) { long currentTime = new Date().getTime(); } }}

结果如下:

耗时:44ms耗时:1973ms耗时:44ms