介绍
过去我们经常使用Date和 Calendar的APIs来表示和操作时间
- java.util.Date – 表示日期和时间, 使用默认时区.
- java.util.Calendar – 表示日期和时间, 更多操纵日期的方法.
- java.text.SimpleDateFormat – 格式化(日期 - >文本),解析日期和日历(文本 - >日期)
在jdk8,我们开始使用新的APIs,(JSR310 受 Joda-time启发,并且创建新的java.time包)
- java.time.LocalDate – 日期(不包括时间), 不包括时区.
- java.time.LocalTime – 时间(不包括日期), 不包括时区.
- java.time.LocalDateTime – 日期和时间, 不包括时区.
- java.time.ZonedDateTime – 日期和时间, 包括.
- java.time.DateTimeFormatter – 格式化(日期 - >文本),解析日期和日历(文本 - >日期)
- java.time.Instant – 机器的日期和时间
, 从Unix纪元时间(1970年1月1日午夜)开始的秒数 - java.time.Duration – 以秒和纳秒为单位测量时间.
- java.time.Period – 测量年,月和日的时间.
- java.time.TemporalAdjuster –调整日期
例子
如何将String转换为LocalDate
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/MM/yyyy");
String date = "10/08/2018";
//convert String to LocalDate
LocalDate localDate = LocalDate.parse(date, formatter);
Convert Instant to LocalDateTime
public static void main(String[] argv) {
// Parse a ISO 8601 Date directly
//Instant instant = Instant.parse("2018-10-18T06:17:10.225Z");
Instant instant = Instant.now();
System.out.println("Instant : " + instant);
//Convert instant to LocalDateTime, no timezone, add a zero offset / UTC+0
LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
System.out.println("LocalDateTime : " + ldt);
}
LocalDateTime To Long
localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()
ZoneId处理时区
计算间隔
Period : 用于计算两个日期(年月日)间隔。
Duration : 用于计算两个时间(秒,纳秒)间隔。
参考文档
https://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html