Vih*_*ung 230 java performance time calendar date
在Java中,使用的性能和资源含义是什么
System.currentTimeMillis()
Run Code Online (Sandbox Code Playgroud)
与
new Date()
Run Code Online (Sandbox Code Playgroud)
与
Calendar.getInstance().getTime()
Run Code Online (Sandbox Code Playgroud)
据我了解,System.currentTimeMillis()是最有效的.但是,在大多数应用程序中,需要将该长值转换为Date或某些类似对象,以对人类执行任何有意义的操作.
Mic*_*rdt 235
System.currentTimeMillis()显然是最有效的,因为它甚至没有创建一个对象,但new Date()实际上只是一个很长的薄包装,所以它不会落后.Calendar另一方面,它相对缓慢而且非常复杂,因为它必须处理日期和时间(闰年,夏令时,时区等)固有的相当复杂和所有奇怪的问题.
通常最好只处理Date应用程序中的长时间戳或对象,并且仅Calendar在实际需要执行日期/时间计算时使用,或者将日期格式设置为显示给用户.如果你必须做很多这样的事情,那么使用Joda Time可能是一个好主意,因为它具有更清晰的界面和更好的性能.
Esk*_*sko 42
看看JDK,最里面的构造函数Calendar.getInstance()有:
public GregorianCalendar(TimeZone zone, Locale aLocale) {
super(zone, aLocale);
gdate = (BaseCalendar.Date) gcal.newCalendarDate(zone);
setTimeInMillis(System.currentTimeMillis());
}
Run Code Online (Sandbox Code Playgroud)
所以它已经自动完成了你的建议.Date的默认构造函数包含:
public Date() {
this(System.currentTimeMillis());
}
Run Code Online (Sandbox Code Playgroud)
所以真的不需要专门获得系统时间,除非你想在用它创建Calendar/Date对象之前用它做一些数学运算.另外,如果您的目的是大量使用日期计算,我必须建议使用joda-time作为Java自己的日历/日期类的替代品.
kro*_*old 22
如果您正在使用约会,那么我强烈建议您使用jodatime,http: //joda-time.sourceforge.net/ .使用System.currentTimeMillis()该字段是日期听起来像一个非常糟糕的主意,因为你有很多无用的代码而告终.
日期和日历都严重受挫,而日历绝对是他们所有人中表现最差的.
我建议你System.currentTimeMillis()在实际操作毫秒时使用,例如像这样
long start = System.currentTimeMillis();
.... do something ...
long elapsed = System.currentTimeMillis() -start;
Run Code Online (Sandbox Code Playgroud)
Bom*_*mbe 12
我更喜欢使用返回的值System.currentTimeMillis()进行各种计算,只使用Calendar或者Date我需要真正显示人类读取的值.这也可以防止99%的夏令时错误.:)
Puz*_*rki 12
在我的机器上,我试过检查它.我的结果:
Calendar.getInstance().getTime() (*1000000 times) = 402ms new Date().getTime(); (*1000000 times) = 18ms System.currentTimeMillis() (*1000000 times) = 16ms
不要忘记GC(如果你使用Calendar.getInstance()或new Date())
根据您的应用程序,您可能需要考虑使用System.nanoTime().