JDK8开始新增日期API
概述
- 从Java8开始,java.time包提供了新的日期和时间API,主要涉及的类型有
- LocalDate:不包含具体时间的日期
- LocalTime:不含日期的时间
- LocalDateTime:包含了日期及时间
- Instant:代表的是时间戳
- DateTimeFormatter:用于做时间的格式化和解析的
- Duration:用于计算两个“时间”间隔
- Period:用于计算两个“日期”间隔
- 新增的API严格区分了时刻,本地日期,本地时间,并且,对日期和时间进行运算更加方便
- 其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改
LocalTime/LocalDate/LocalDateTime ' API
- 他们分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象
- 他们三者构建对象和API都是通用的
-
构建对象的方式
方法名 说明 例子 public static Xxxx now(); 静态方法,根据当前时间创建对象 LocalDate localdate = LocalDate.now(); LocalTime localtime = LocalTime.now(); LocalDateTime localdatetime = LocalDateTime.now(); public static Xxxx of(...) 静态方法,指定日期/时间创建对象 LocalDate localdate1 = LocalDate.now(2000,12,16); LocalTime localtime1 = LocalTime.now(11,11,11); LocalDateTime localdatetime1
=
LocalDateTime.now(2000,12,16,20,23,57); -
获取信息的API
方法名 说明 public int getYear(); 获取年 public int getMonthValue(); 获取月份(1-12) public int getDayOfMonth(); 获取月中第几天 public int getDayOfYear(); 获取年中第几天 public DayOfWeek getDayOfWeek() 获取星期 -
LocalDateTime的转换API
方法名 说明 public LocalDate toLocalDate() 转换成一个LocalDate对象 public LocalTime toLocalTime() 转换成一个LocalTime对象 -
修改相关API
方法名 说明 plusDays,plusWeeks,plusMonths,plusYears 向当前LocalDate对象添加几天/周/月/年 minusDays,minusWeeks,minusMonths,minusYears 从当前对象减去几天/周/月/年 withDayOfMonth,withDayOfYear,withMonth,withYear 将月份天数,年份天数,月份,年份修改为指定的值
并返回新的LocalDate对象isBefore,isAfter 比较两个LocalDate LocalDateTime综合了LocalDate和LocalTime里面的方法,测试用例仅用LocalDate和LcoalTime测试
这些方法返回的是一个新的实例引用,因为LocalDateTime,LocalDate,LocalTime都是不可变的
LocalDate测试代码
package com.java.jdk8time_update;
import java.time.LocalDate;
import java.time.Month;
/**
* LocalDate测试案例
*/
public class LocalDateTest {
public static void main(String[] args) {
// 获取本地日期对象
LocalDate nowDate = LocalDate.now(); // 出现的日期,说明重写了toString()
System.out.println("今天的日期" + nowDate);
int year = nowDate.getYear();
int month = nowDate.getMonthValue();
int day = nowDate.getDayOfMonth();
System.out.println(year + "年" + month + "月" + day + "日");
int dayOfYear = nowDate.getDayOfYear();
System.out.println("一年中的第" + dayOfYear + "天");
//DayOfWeek返回值类型是DayOfWeek,因此调用getValue()获取值为int类型方便使用int类型变量接收
int dayOfWeek = nowDate.getDayOfWeek().getValue();
System.out.println("一周的第" + dayOfWeek + "天");
int intMonth = nowDate.getMonth().getValue();
System.out.println("月份:" + nowDate.getMonth()); //直接调用默认英文显示
System.out.println("月份:" + intMonth);
System.out.println("---------------------------------------------");
LocalDate bt = LocalDate.of(1949, 10, 1);
System.out.println("打印指定日期:" + bt);
// Month.NOVEMBER使用枚举的方式输出指定日期
System.out.println("枚举方式指定日期:" + LocalDate.of(1949, Month.NOVEMBER, 11));
}
}
LocalTime测试代码
package com.java.jdk8time_update;
import java.time.LocalDateTime;
import java.time.LocalTime;
/**
* LocalTime测试案例
*/
public class LocalTimeTest {
public static void main(String[] args) {
LocalTime nowTime = LocalTime.now();
System.out.println("今天的时间:" + nowTime);
int hours = nowTime.getHour();
int minutes = nowTime.getMinute();
int seconds = nowTime.getSecond();
int nanos = nowTime.getNano();
System.out.println("今天的时间【格式:时/分/秒/纳秒】:");
System.out.println(hours + "/" + minutes + "/" + seconds + "/" + nanos);
System.out.println("------------------------指定时间------------------------");
System.out.println(LocalTime.of(8,20));
System.out.println(LocalTime.of(8,20,30));
System.out.println(LocalTime.of(8,20,30,150));
LocalTime time = LocalTime.of(8,20,30,150);
System.out.println(time);
System.out.println("------------------------指定年月日时刻-------------------");
System.out.println(LocalDateTime.of(1991, 12, 16, 8, 31, 23, 143));
}
}
LocalDateTime测试代码
package com.java.jdk8time_update;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
/**
* LocalDateTime测试案例
* 兼容了LocalDate & LocalTime所有的API
*/
public class LocalDateTimeTest {
public static void main(String[] args) {
LocalDateTime nowDateTime = LocalDateTime.now();
System.out.println("今日时间:" + nowDateTime);
System.out.println("年:" + nowDateTime.getYear());
System.out.println("月:" + nowDateTime.getMonthValue());
System.out.println("日:" + nowDateTime.getDayOfMonth());
System.out.println("时:" + nowDateTime.getHour());
System.out.println("分:" + nowDateTime.getMinute());
System.out.println("秒:" + nowDateTime.getSecond());
System.out.println("纳秒:" + nowDateTime.getNano());
System.out.println("当年第几天:" + nowDateTime.getDayOfYear());
System.out.println("当月第几天:" + nowDateTime.getDayOfMonth());
System.out.println("当周第几天:" + nowDateTime.getDayOfWeek().getValue());
System.out.println("星期几:" + nowDateTime.getDayOfWeek());
System.out.println("几月份:" + nowDateTime.getMonthValue());
System.out.println("几月份:" + nowDateTime.getMonth());
// 转换对象
LocalDate ld = nowDateTime.toLocalDate();
System.out.println(ld);
System.out.println(ld.getDayOfYear());
LocalTime lt = nowDateTime.toLocalTime();
System.out.println(lt);
System.out.println(lt.getHour());
}
}
日期时间修改测试代码
package com.java.jdk8time_update;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.MonthDay;
/**
* 对日期进行修改
*/
public class UpdateTimeTest {
public static void main(String[] args) {
LocalTime nowTime = LocalTime.now();
System.out.println(nowTime);
// 以小时增减操作为例
System.out.println(nowTime.plusHours(1));
System.out.println(nowTime.minusHours(2));
//LocalTime为不可变对象,每次操作都会产生新的对象,原对象的信息并没有发生变化
System.out.println(nowTime);
LocalDate date1 = LocalDate.of(2022, 2, 6);
LocalDate date2 = LocalDate.now();
System.out.println("两个日期相同吗:" + date1.equals(date2));
System.out.println("data1 before data2:" + date1.isBefore(date2));
System.out.println("data1 after data2:" + date1.isAfter(date2));
// MonthDay :月日对象
MonthDay d1 = MonthDay.of(date1.getMonthValue(), date1.getDayOfMonth()); //获取月日
MonthDay d2 = MonthDay.from(date2); //获取今天的日期
System.out.println("d1 == d2 时触发某事件:" + d1.equals(d2));
}
}
网友评论