学习Java中的日期和时间函数
Java中的日期和时间函数是一个重要的主题,在很多的Java应用程序中日期和时间的处理都是非常重要的。
Java 8之前,日期和时间相关的类存储只是年月日和时分秒的时间格式。它们不是线程安全的,设计得很复杂,并且要为各种时区进行转换非常麻烦。从Java 8开始,使用了新的Java.time包来解决这些问题,它使用了新的API,并提供了线程安全,以及为各种时间格式进行转换的特性。
下面,我们来学习Java中的日期和时间函数。
1. LocalDate和LocalTime
LocalDate表示ISO-8601的日期,格式yyyy-MM-dd,例如:2018-12-12。LocalTime表示一个无时区的时间,格式为hh:mm:ss.zzz,例如:19:20:30.999。
两者的创建非常简单,只需调用静态工厂方法:
LocalDate date = LocalDate.now(); LocalTime time = LocalTime.now();
你也可以通过传入整数值来创建:
LocalDate date = LocalDate.of(2014, 3, 18); LocalTime time = LocalTime.of(13, 45, 20);
也可以从字符串解析本地日期和时间:
LocalDate date = LocalDate.parse("2019-05-20");
LocalTime time = LocalTime.parse("22:15:30");
2. LocalDateTime
LocalDateTime合并了LocalDate和LocalTime的信息。它是ISO-8601日期时间格式,例如:2018-12-12T12:20:30。创建方式类似于java.time.LocalDate和java.time.LocalTime。你可以通过下面的示例来创建任意本地日期时间。
LocalDateTime datetime1 = LocalDateTime.of(2014, Month.DECEMBER, 12, 12, 12, 12);
LocalDateTime datetime2 = LocalDateTime.parse("2014-12-12T12:12:12");
3. Instant
Instant类与java.util.Date类非常相似。它表示从1970-01-01T00:00Z开始的秒数,也称为Unix时间戳。Java 8增加了两个静态工厂方法来创建实例,不必使用系统的时间作为参数:
Instant instant = Instant.now(); Instant instant = Instant.ofEpochSecond(epochSeconds);
4. Duration和Period
Duration和Period两个类也存在,在Java中表示时间段和日期段。java.time.Period类识别年、月和日之间的一段时间,java.time.Duration识别时间段,例如分钟,小时或天。下面是一个例子:
LocalDateTime oldDate = LocalDateTime.now();
LocalDateTime newDate = oldDate.plus(Period.ofDays(10));
Duration duration = Duration.between(newDate, oldDate);
System.out.println("Duration between dates: "+duration.getSeconds());
5. 格式化和解析日期
来解决一些格式化和解析问题:
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatDateTime = now.format(format);
LocalDateTime parseDateTime = LocalDateTime.parse(formatDateTime, format);
6. 时区
时区对于应用程序来说非常重要。Java 8在设计的时候引入了一个新的java.time.ZonedDateTime类,允许在转换时区时使用时区信息。下面是一个例子:
ZoneId america = ZoneId.of("America/New_York");
LocalDateTime localtDateAndTime = LocalDateTime.now();
ZonedDateTime dateAndTimeInNewYork = ZonedDateTime.of(localtDateAndTime, america);
System.out.println("Current datetime in - "+dateAndTimeInNewYork);
这是一个简短的关于 Java 8日期时间类的总结。使用这些类可以使你的应用程序更加现代化,避免了以前旧API的问题。
