System.currentTimeMillis() 是 Java 中的一个方法,用于获取当前系统时间的毫秒数。它返回的是从1970年1月1日 00:00:00 UTC(协调世界时)到当前时间的毫秒数。

这个方法通常用于计算时间间隔、性能测试、时间戳生成等场景。例如,如果你想计算某个操作所花费的时间,你可以在操作开始时调用 System.currentTimeMillis() 获取一个起始时间戳,在操作结束时再次调用该方法获取一个结束时间戳,然后计算两个时间戳之间的差值,即可得到操作所花费的时间。

下面是一个简单的示例代码:

long startTime = System.currentTimeMillis();

// 执行一些操作

long endTime = System.currentTimeMillis();
long elapsedTime = endTime - startTime;

System.out.println("操作耗时:" + elapsedTime + " 毫秒");

需要注意的是,System.currentTimeMillis() 返回的是一个长整型数值,表示的是相对于参考时间点的毫秒数。由于这个方法依赖于系统时钟,因此在某些情况下可能会受到时钟漂移或调整的影响。如果需要更高精度的时间计算,可以考虑使用 java.time 包中的类,如 Instant 或 LocalDateTime

 

Java 8 引入了 java.time 包,其中包含了许多用于处理日期、时间和时间间隔的类。其中,Instant 和 LocalDateTime 是两个常用的类。

  1. Instant
    Instant 类表示时间线上的一个特定点,它是基于从1970年1月1日 00:00:00 UTC(协调世界时)开始的纳秒数来表示的。它提供了处理时间戳的功能,可以用于表示和计算绝对时间。

下面是一个使用 Instant 的简单示例:

Instant instant = Instant.now(); // 获取当前时间戳

System.out.println("当前时间戳:" + instant);

// 在时间戳上进行一些操作
Instant laterInstant = instant.plusSeconds(60); // 在当前时间戳上增加60秒

System.out.println("增加60秒后的时间戳:" + laterInstant);
  1. LocalDateTime
    LocalDateTime 类表示一个不带时区信息的日期时间,它包含了年、月、日、时、分、秒等信息。它提供了一系列方法用于对日期和时间进行操作和格式化。

下面是一个使用 LocalDateTime 的简单示例:

LocalDateTime localDateTime = LocalDateTime.now(); // 获取当前日期时间

System.out.println("当前日期时间:" + localDateTime);

// 在日期时间上进行一些操作
LocalDateTime laterDateTime = localDateTime.plusHours(2).plusMinutes(30); // 在当前日期时间上增加2小时30分钟

System.out.println("增加2小时30分钟后的日期时间:" + laterDateTime);

需要注意的是,LocalDateTime 是不带时区信息的,它表示的是本地的日期时间。如果需要处理带有时区的日期时间,可以使用 ZonedDateTime 类。

这只是对 Instant 和 LocalDateTime 的简单介绍,java.time 包中还有许多其他类和方法可以用于更复杂的日期和时间操作。

 

3、ZonedDateTime:

  ZonedDateTime 类是 java.time 包中用于表示带有时区信息的日期时间的类。它包含了年、月、日、时、分、秒和时区等信息,可以用于处理跨时区的日期和时间操作。

下面是一个使用 ZonedDateTime 的简单示例:

// 创建一个表示当前日期时间的 ZonedDateTime 对象
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("当前日期时间:" + zonedDateTime);

// 创建一个表示指定时区的 ZonedDateTime 对象
ZoneId newYorkZone = ZoneId.of("America/New_York");
ZonedDateTime newYorkDateTime = ZonedDateTime.now(newYorkZone);
System.out.println("纽约当前日期时间:" + newYorkDateTime);

// 在日期时间上进行一些操作
ZonedDateTime futureDateTime = zonedDateTime.plusDays(3).plusHours(2);
System.out.println("3天2小时后的日期时间:" + futureDateTime);

// 转换时区
ZoneId londonZone = ZoneId.of("Europe/London");
ZonedDateTime londonDateTime = zonedDateTime.withZoneSameInstant(londonZone);
System.out.println("伦敦当前日期时间:" + londonDateTime);

在上面的示例中,我们首先创建了一个表示当前日期时间的 ZonedDateTime 对象。然后,我们使用 ZoneId 类创建了一个表示纽约时区的 ZoneId 对象,并使用该时区创建了一个纽约的日期时间。接着,我们对日期时间进行了一些操作,例如增加了3天2小时。最后,我们使用 withZoneSameInstant() 方法将日期时间转换到了伦敦时区。

需要注意的是,时区的表示使用的是 IANA 时区标识符,例如 "America/New_York" 表示纽约时区,"Europe/London" 表示伦敦时区。可以通过 ZoneId.getAvailableZoneIds() 方法获取所有可用的时区标识符。

ZonedDateTime 类提供了许多其他方法用于日期和时间的操作和格式化,例如获取年、月、日等信息,比较日期时间的先后顺序,以及格式化日期时间为字符串等。

posted on 2023-09-11 10:03  jarsing  阅读(63)  评论(0)    收藏  举报