Java 时钟是 Java 8 中引入的一种新的时间 API,它提供了一种更加灵活和可扩展的方式来处理时间和日期。它可以用来计算时间差,获取当前时间,获取特定时刻的时间戳,以及在特定的时刻执行任务。
Java 时钟使用 Clock 类来表示一个特定的时钟,该类提供了多个静态工厂方法来创建不同类型的 Clock 对象。其中最常用的是 systemUTC() 和 systemDefaultZone() 方法,前者返回 UTC 时区的 Clock 对象,而后者返回当前 JVM 运行所在地区的 Clock 对象。
Clock 类还提供了多个方法来处理时间:getTime() 方法用于获取当前 Clock 对应的 Instant 对象(即 Unix 时间戳);millis() 方法用于获取当前 Clock 对应的毫秒数;instant() 方法用于将当前 Clock 对应的 Instant 转换为 LocalDateTime 对象。
Clock clock = Clock.systemUTC(); // 获取 UTC 时区对应的 Clock 实例 long millis = clock.millis(); // 获取当前毫秒数 Instant instant = clock.instant();// 转换为 LocalDateTime 实例 LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());// 转换为本地日期时间
Clock
类表示真实世界的时钟。
我们可以从Clock类中访问时区中的当前时间,日期和时间。
我们可以为系统默认时区创建一个时钟,如下所示。
Clock clock = Clock.systemDefaultZone();
要为指定的时区创建时钟。
ZoneId z = ZoneId.of("America/Los_Angeles"); Clock clock2 = Clock.system(z);
要从时钟获取当前的时间,日期和时间,请使用datetime相关类的now(Clock c)
方法。
import java.time.Clock; import java.time.Instant; import java.time.LocalDate; import java.time.ZonedDateTime; public class Main { public static void main(String[] args) { Clock clock = Clock.systemDefaultZone(); Instant instant1 = clock.instant(); System.out.println(instant1); Instant instant2 = Instant.now(clock); System.out.println(instant2); LocalDate localDate = LocalDate.now(clock); System.out.println(localDate); ZonedDateTime zoneDateTime = ZonedDateTime.now(clock); System.out.println(zoneDateTime); } }
上面的代码生成以下结果。
周期是以年,月和日为单位的时间跨度。
支持负周期。
持续时间也是以秒和纳秒为单位测量的时间跨度。
持续时间表示机器的精确纳秒数。一个时期更适合人类。
1天,2个月,3天,4个月和5天都是周期的实例。2个月期间可能意味着不同的天数,具体取决于不同的月份。
我们可以使用以下方法创建 Period
。
static Period of(int years,int months, int days) static Period ofDays(int days) static Period ofMonths(int months) static Period ofWeeks(int weeks) static Period ofYears(int years)
以下代码显示了如何创建Period。
import java.time.Period; public class Main { public static void main(String[] args) { Period p1 = Period.of(2, 3, 5); // 2 years, 3 months, and 5 days Period p2 = Period.ofDays(2); // 2 days Period p3 = Period.ofMonths(-3); // -3 months Period p4 = Period.ofWeeks(3); // 3 weeks System.out.println(p1); System.out.println(p2); System.out.println(p3); System.out.println(p4); } }
上面的代码生成以下结果。
Period支持加法,减法,乘法和求反运算。
除法运算执行整数除法,例如,除以3除以7为2。
以下代码显示如何使用周期上的操作。
import java.time.Period; public class Main { public static void main(String[] args) { Period p1 = Period.ofDays(15); System.out.println(p1); Period p2 = p1.plusDays(12); System.out.println(p2); Period p3 = p1.minusDays(12); System.out.println(p3); Period p4 = p1.negated(); System.out.println(p4); Period p5 = p1.multipliedBy(3); System.out.println(p5); } }
上面的代码生成以下结果。
Period plus()
向另一个周期添加一个周期。
Period minus()
从另一个周期中减去一个周期。
周期normalized()方法标准化年和月。该方法确保月份值保持在0到11之间。“2年零16个月"被标准化为“3年零4个月"。
import java.time.Period; public class Main { public static void main(String[] args) { Period p1 = Period.of(2, 3, 5); Period p2 = Period.of(1, 15, 28); System.out.println(p1); System.out.println(p2); System.out.println(p1.minus(p2)); System.out.println(p1.plus(p2)); System.out.println(p1.plus(p2).normalized()); } }
上面的代码生成以下结果。
Date-Time API提供了计算两个日期和时间之间的已用时间的方法。
我们可以在ChronoUnit枚举中的一个常量上使用 between()
方法。
ChronoUnit枚举between()方法需要两个datetime对象并返回一个long。 如果第二个参数出现在第一个参数之前,它返回一个负数。
返回金额是两个日期和时间之间的完整单位数。 例如,在06:00和09:30之间调用HOURS.between(),返回值为3,而不是3.5。 而MINUTES.在06:00至09:30之间返回210。
import java.time.LocalDate; import java.time.LocalTime; import java.time.Month; import java.time.temporal.ChronoUnit; public class Main { public static void main(String[] args) { LocalDate ld1 = LocalDate.of(2014, Month.JANUARY, 7); LocalDate ld2 = LocalDate.of(2014, Month.MAY, 21); long days = ChronoUnit.DAYS.between(ld1, ld2); System.out.println(days); LocalTime lt1 = LocalTime.of(6, 0); LocalTime lt2 = LocalTime.of(9, 30); long hours = ChronoUnit.HOURS.between(lt1, lt2); System.out.println(hours); long minutes = ChronoUnit.MINUTES.between(lt1, lt2); System.out.println(minutes); } }
上面的代码生成以下结果。
Date-Time API提供了计算两个日期和时间之间的已用时间的方法。
我们可以对一个日期时间相关类使用 until(end_date_or_time,time_unit)
方法,例如LocalDate,LocalTime,LocalDateTime,ZonedDateTime等。
import java.time.LocalDate; import java.time.LocalTime; import java.time.Month; import java.time.temporal.ChronoUnit; public class Main { public static void main(String[] args) { LocalDate ld1 = LocalDate.of(2014, Month.JANUARY, 7); LocalDate ld2 = LocalDate.of(2014, Month.MAY, 18); LocalTime lt1 = LocalTime.of(7, 0); LocalTime lt2 = LocalTime.of(9, 30); long days = ld1.until(ld2, ChronoUnit.DAYS); System.out.println(days); long hours = lt1.until(lt2, ChronoUnit.HOURS); System.out.println(hours); long minutes = lt1.until(lt2, ChronoUnit.MINUTES); System.out.println(minutes); } }
上面的代码生成以下结果。
Java日期时间传统互操作性在Java 8之前,Java日期和时间由 java.util.Date , java.util.Calendar 和 java.util.TimeZone 类以及...
Java流- Java集合流来自数组的流java.util.Arrays类包含用于从数组创建顺序流的stream()方法。我们可以使用它来创建一个IntStr...
Java IO教程 -Java随机访问文件使用随机访问文件,我们可以从文件读取以及写入文件。使用文件输入和输出流的读取和写入是顺序过...
Java IO教程 -Java文件File类的对象是文件或目录的路径名的抽象表示。创建文件我们可以从中创建一个 File 对象路径名父路径名和...
Java IO教程 -Java文件 java.nio.file.Files 包含所有允许我们对Path对象执行大多数文件操作的静态方法。创建新文件文件可以创建...