Java8日期/时间API

2017-08-07  本文已影响0人  tudouSmart

旧的日期/时间API的缺点

Java8日期API设计原则

  1. 不变性:新的日期API中,所有类都是不可变类
  2. 关注点分离:将人类可读的日期时间与机器时间分离,为日期(Dat)e、时间(Time)、日期时间(DateTime)、时间戳(unix timestamp)以及时区定义了不同的类
  3. 清晰:所有的类中都定义了用以完成相同动作的方法,比如过去当前实例的now(),格式装换的format()和parse()方法
  4. 实用操作:所有日期API都实现了常用的操作,如加、减、格式化等

Java8时间/日期API相关包

Java8常用日期/时间API示例

// 只包含日期,默认格式为(yyyy-MM-dd)
LocalDate nowDate = LocalDate.now();
// 只包含时间,默认格式为(hh:mm:ss.zzz)
LocalTime nowTime = LocalTime.now();
// 既包含日期也包含时间,默认格式为(yyyy-MM-dd-HH-mm-ss.zzz)
LocalDateTime nowDateTime = LocalDateTime.now();
// 用在机器可读的时间格式上的,它以Unix时间戳的形式存储日期时间
Instant instant = Instant.now();
// 可以在参数中传递ZonId指定时区
LocalDate nowDate = LocalDate.now(ZoneId.of("Asia/Shanghai"));
LocalTime nowTime = LocalTime.now(ZoneId.of("Asia/Shanghai"));
LocalDateTime nowDateTime = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
LocalDateTime date = LocalDateTime.of(2011,8,6,15,23,12);
// 可以通过parse方法以指定的模式将字符串转换为日期类型
LocalDateTime time = LocalDateTime.parse("2016-05-07 13:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
int year = date.getYear();
Month month = date.getMonth();
int day = date.getDayOfMonth();
System.out.println(date);
System.out.println("year: "+year+" month: "+ month.getValue()+" day: "+day);
LocalDateTime now = LocalDateTime.now();
LocalDateTime newTime = now.plusYears(2).plusMonths(3).plusHours(1).plusMinutes(2);
// 通过format方法可以获得格式化的日期字符串
// 格式化类型可以通过DateTimeFormatter.ofPattern(str)方法获得
System.out.println(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println(newTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
LocalDateTime now = LocalDateTime.now();
LocalDate localDate = now.toLocalDate();
LocalTime localTime = now.toLocalTime();
LocalDateTime other = LocalDateTime.of(localDate, localTime);
public void localDateTime2Date() {
    LocalDateTime now = LocalDateTime.now();
    ZoneId zoneId = ZoneId.systemDefault();
    Instant instant = now.atZone(zoneId).toInstant();
    Date date = Date.from(instant);
}
public void date2LocalDateTime() {
    Date date = new Date();
    Instant instant = date.toInstant();
    ZoneId zoneId = ZoneId.systemDefault();
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zoneId);
}
public static void main(String[] args) {
    LocalDateTime now = LocalDateTime.now();
    LocalDateTime today = now.minusDays(1);
    System.out.println(now.equals(today));
    System.out.println(now.isBefore(today));
    System.out.println(now.isAfter(today));
}
上一篇 下一篇

猜你喜欢

热点阅读