Calendar获取微秒
时间: 2025-04-03 12:16:00 浏览: 23
在 Java 中,`java.util.Calendar` 类本身并不支持直接获取微秒级别的精度时间值。其设计仅提供毫秒级的时间分辨率[^1]。然而,可以通过其他方式间接实现这一需求。
### 使用 `System.nanoTime()` 实现更高精度
虽然 `Calendar` 和传统的 `Date` 类只支持毫秒级精度,但可以借助 `System.nanoTime()` 来获得纳秒级的时间戳,并将其转换为微秒级别。需要注意的是,`nanoTime()` 提供的值是一个相对值而非绝对时间戳,因此通常需要结合 `currentTimeMillis()` 或者 `Instant.now().toEpochMilli()` 进行校准:
```java
import java.time.Instant;
public class MicrosecondExample {
public static void main(String[] args) {
long epochMilliseconds = System.currentTimeMillis();
Instant instant = Instant.ofEpochMilli(epochMilliseconds);
// 获取纳秒部分并转成微秒
int nanoAdjustment = (int)(System.nanoTime() % 1_000_000_000L); // 取当前纳秒偏移量
long microsecondsSinceEpoch = epochMilliseconds * 1000 + nanoAdjustment / 1000;
System.out.println("Microseconds since Epoch: " + microsecondsSinceEpoch);
}
}
```
上述代码通过组合 `System.currentTimeMillis()` 和 `System.nanoTime()` 的结果来构建一个具有微秒精度的时间戳[^5]。
### 利用 `java.time` API 替代 Calendar
自 JDK 8 起推荐使用新的 `java.time` 包代替旧版日期时间处理工具。其中 `Instant` 类能够精确表示至纳秒单位的时间点,从而轻松提取出微秒级数据:
```java
import java.time.Instant;
public class TimeInMicros {
public static void main(String[] args){
Instant now = Instant.now();
long micros = now.toEpochMilli()*1000 + (now.getNano()/1000);
System.out.printf("Current time in microseconds is %d%n",micros);
}
}
```
此段程序展示了如何利用现代API准确得到带微秒的小数位时间表达形式[^4]。
尽管如此,在实际应用当中如果确实需要用到亚毫秒级计时功能,则建议优先考虑采用专门针对高性能场景优化过的第三方库比如 HdrHistogram 或 Micrometer 等替代方案[^3]。
阅读全文
相关推荐











