System.currentTimeMillis()和Date getTime()之间的区别?

我希望通过对返回时间戳的函数的许多调用来获得微小的性能提升。 该函数如下所示:

public static long get_now_ms(){ // returns number of MILLISECONDS since epoch java.util.Date d = new java.util.Date(); return d.getTime(); } 

我可以用以下内容替换它:

 public static long get_now_ms(){ // returns number of MILLISECONDS since epoch return System.currentTimeMillis(); } 

我知道Date内部使用System.currentTimeMillis()。 我的问题是,夏令时或时区是否会导致这两种方法的结果不同。 我想这可能会出现Calendar对象,但不是Date对象,但是会对此有所了解。

我知道我可能不会在实际应用程序中看到明显的性能差异,但仍然想知道答案。

谢谢!

没有区别,除了分配Date对象造成的非常轻微的延迟。

从javadoc开始 , Date的默认构造函数:

分配一个Date对象并对其进行初始化,使其表示分配时间,测量精确到毫秒。

Date只是一个在epoch毫秒左右的薄包装器,没有任何时区概念。 只有在渲染到String时才会考虑时区,但这是由Locale类处理的。

我建议运行unit testing(例如https://gist.github.com/ledlogic/8532028 )。 我看到运行System.currentTimeMillis与(new Date())。getTime()只有一点点整体好处。

 1 billion runs: (1000 outer loops, 1,000,000 inner loops): System.currentTimeMillis(): 14.353 seconds (new Date()).getTime(): 16.668 seconds 

个别运行有时会稍微偏向后一种方法 – 取决于您的系统活动。

没有区别,Calendar.getTimeInMillis()也是一样的。 因为返回结果是自1970年1月1日00:00:00 GMT以来的毫秒数。 无论你是谁,你都会获得相同的长期价值。