19
2021
01

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是区分时区的,因为要处理时区问题会耗费很多的时间。


附测试如下:

import java.util.Calendar; 

import java.util.Date; 

 

public class TimeTest { 

  private static long _TEN_THOUSAND=10000; 

  public static void main(String[] args) { 

    long times=1000*_TEN_THOUSAND; 

    long t1=System.currentTimeMillis(); 

    testSystem(times); 

    long t2=System.currentTimeMillis(); 

    System.out.println(t2-t1); 

    testCalander(times); 

    long t3=System.currentTimeMillis(); 

    System.out.println(t3-t2); 

    testDate(times); 

    long t4=System.currentTimeMillis(); 

    System.out.println(t4-t3); 

  } 

   

  public static void testSystem(long times){//use 188 

    for(int i=0;i<times;i++){ 

      long currentTime=System.currentTimeMillis(); 

    } 

  } 

 

  public static void testCalander(long times){//use 6299 

    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(); 

    } 

     

  }  

效果如下


187 

7032 

297


Calendar.getInstance().getTimeInMillis() 这种方式速度最慢,这是因为Canlendar要处理时区问题会耗费较多的时间。

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。