我正在开发一个系统,经常使用系统时间,因为需要使用
如何更快地获取系统时间?
目前,每次需要获取时间时,我都使用
Delayed
接口。如何更快地获取系统时间?
目前,每次需要获取时间时,我都使用
Calendar.getInstance().getTimeInMillis()
,但我不知道是否有更快的方法。System.currentTimeMillis()
"返回当前时间的毫秒数".
使用此方法可获取实际系统时间。
System.nanoTime()
.
"该方法返回自某个固定且任意的起始时间以来经过的纳秒数"
如果你需要测量时间间隔或事件,则可以使用此方法。
System.nanoTime()
更加适合,以避免在getDelay()方法中进行单位转换。 - Renato DinhaniSystem.currentTimeMillis()
在以下测试用例中最快
public class ClassTest
{
@Test
public void testSystemCurrentTime()
{
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++)
{
System.currentTimeMillis();
}
stopwatch.stop();
System.out.println("System.currentTimeMillis(): " + stopwatch);
}
@Test
public void testDateTime()
{
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++)
{
(new Date()).getTime();
}
stopwatch.stop();
System.out.println("(new Date()).getTime(): " + stopwatch);
}
@Test
public void testCalendarTime()
{
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++)
{
Calendar.getInstance().getTimeInMillis();
}
stopwatch.stop();
System.out.println("Calendar.getInstance().getTimeInMillis(): " + stopwatch);
}
@Test
public void testInstantNow()
{
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++)
{
Instant.now();
}
stopwatch.stop();
System.out.println("Instant.now(): " + stopwatch);
}
}
输出:
(new Date()).getTime(): 36.89 ms
Calendar.getInstance().getTimeInMillis(): 448.0 ms
Instant.now(): 34.13 ms
System.currentTimeMillis(): 10.28 ms
但是,
Instant.now()
很快且更简单,同时还提供其他实用工具,例如 Instant.now().getEpochSecond();
,Instant.now().getNano();
, Instant.now().compareTo(otherInstant);
等等。
System.currentTimeMillis()
更快。@Test
public void testSystemCurrentTime() {
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++) {
System.currentTimeMillis();
}
stopwatch.stop();
System.out.println("System.currentTimeMillis(): " + stopwatch);
}
@Test
public void testDateTime() {
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++) {
(new Date()).getTime();
}
stopwatch.stop();
System.out.println("(new Date()).getTime(): " + stopwatch);
}
@Test
public void testCalendarTime() {
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++) {
Calendar.getInstance().getTimeInMillis();
}
stopwatch.stop();
System.out.println("Calendar.getInstance().getTimeInMillis(): " + stopwatch);
}
System.currentTimeMillis(): 5.208 ms (new Date()).getTime(): 19.57 ms Calendar.getInstance().getTimeInMillis(): 148.2 ms
System.currentTimeMillis(): 4.685 ms (new Date()).getTime(): 11.53 ms Calendar.getInstance().getTimeInMillis(): 122.6 ms
System.currentTimeMillis(): 4.734 ms (new Date()).getTime(): 11.66 ms Calendar.getInstance().getTimeInMillis(): 131.5 ms
System.currentTimeMillis(): 4.018 ms (new Date()).getTime(): 19.33 ms Calendar.getInstance().getTimeInMillis(): 127.6 ms
System.currentTimeMillis(): 5.474 ms (new Date()).getTime(): 16.74 ms Calendar.getInstance().getTimeInMillis(): 113.6 ms
System.currentTimeMillis(): 3.871 ms (new Date()).getTime(): 14.46 ms Calendar.getInstance().getTimeInMillis(): 120.5 ms
System.currentTimeMillis(): 8.223 ms (new Date()).getTime(): 11.65 ms Calendar.getInstance().getTimeInMillis(): 173.8 ms
System.currentTimeMillis(): 4.611 ms (new Date()).getTime(): 9.978 ms Calendar.getInstance().getTimeInMillis(): 117.9 ms
System.currentTimeMillis(): 3.794 ms (new Date()).getTime(): 11.33 ms Calendar.getInstance().getTimeInMillis(): 89.79 ms
System.currentTimeMillis(): 4.298 ms (new Date()).getTime(): 12.37 ms Calendar.getInstance().getTimeInMillis(): 123.8 ms
System.currentTimeMillis()
可能是答案。
System.currentTimeMillis
简单的答案就是这样
long timeMilliSec = System.currentTimeMillis();
long timeMilliSec = System.currentTimeMillis();
getDelay()
方法。 - Renato Dinhani