当前位置:  开发笔记 > 编程语言 > 正文

System.currentTimeMillis()与new Date()与Calendar.getInstance().getTime()

如何解决《System.currentTimeMillis()与newDate()与Calendar.getInstance().getTime()》经验,为你挑选了6个好方法。

在Java中,使用的性能和资源含义是什么

System.currentTimeMillis() 

new Date() 

Calendar.getInstance().getTime()

据我了解,System.currentTimeMillis()是最有效的.但是,在大多数应用程序中,需要将该长值转换为Date或某些类似对象,以对人类执行任何有意义的操作.



1> Michael Borg..:

System.currentTimeMillis()显然是最有效的,因为它甚至没有创建一个对象,但new Date()实际上只是一个很长的薄包装,所以它不会落后.Calendar另一方面,它相对缓慢而且非常复杂,因为它必须处理日期和时间(闰年,夏令时,时区等)固有的相当复杂和所有奇怪的问题.

通常最好只处理Date应用程序中的长时间戳或对象,并且仅Calendar在实际需要执行日期/时间计算时使用,或者将日期格式设置为显示给用户.如果你必须做很多这样的事情,那么使用Joda Time可能是一个好主意,因为它具有更清晰的界面和更好的性能.


timestamp和currentMillis有什么区别?

2> Esko..:

看看JDK,最里面的构造函数Calendar.getInstance()有:

public GregorianCalendar(TimeZone zone, Locale aLocale) {
    super(zone, aLocale);
    gdate = (BaseCalendar.Date) gcal.newCalendarDate(zone);
    setTimeInMillis(System.currentTimeMillis());
}

所以它已经自动完成了你的建议.Date的默认构造函数包含:

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

所以真的不需要专门获得系统时间,除非你想在用它创建Calendar/Date对象之前用它做一些数学运算.另外,如果您的目的是大量使用日期计算,我必须建议使用joda-time作为Java自己的日历/日期类的替代品.



3> krosenvold..:

如果您正在使用约会,那么我强烈建议您使用jodatime,http: //joda-time.sourceforge.net/ .使用System.currentTimeMillis()该字段日期听起来像一个非常糟糕的主意,因为你有很多无用的代码而告终.

日期和日历都严重受挫,而日历绝对是他们所有人中表现最差的.

我建议你System.currentTimeMillis()在实际操作毫秒时使用,例如像这样

 long start = System.currentTimeMillis();
    .... do something ...
 long elapsed = System.currentTimeMillis() -start;


我想对此发表评论,因为你的例子正是你应该*不*使用System.currentTimeMillis()的事情之一; 它不是单调时钟源,因此您无法使用它可靠地计算经过的时间.如果在您正在执行的代码执行时更改系统时钟,您将得到奇怪的(例如负数)结果.而不是使用System.nanoTime(),**是*monotonic*if*底层系统支持这样的时钟源(参见http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6458294)

4> Bombe..:

我更喜欢使用返回的值System.currentTimeMillis()进行各种计算,只使用Calendar或者Date我需要真正显示人类读取的值.这也可以防止99%的夏令时错误.:)



5> 小智..:

在我的机器上,我试过检查它.我的结果:

Calendar.getInstance().getTime() (*1000000 times) = 402ms
new Date().getTime(); (*1000000 times) = 18ms
System.currentTimeMillis() (*1000000 times) = 16ms

不要忘记GC(如果你使用Calendar.getInstance()new Date())



6> MykennaC..:

根据您的应用程序,您可能需要考虑使用System.nanoTime().


这可能是最晚的,问题中的所有例子都有一个绝对概念,例如它是什么时候.自Unix时代开始以来1,348,770,313,071毫秒."nanoTime"返回的时间是相对的(通常是程序的开头),如果你试图将它变成日期,那将是无稽之谈.
推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有