JAVA8基础

Java8新的时间日期类的使用

LocalDate类:

LocalDate类实例是一个不可变对象,它只提供了简单的日期,并不包含当天的时间信息,另外,它也不附带任何与时区相关的信息

我们可以通过静态工厂方法of创建一个localDate实例

LocalDate date = LocalDate.of(2022, 1, 6);

LocalDate类实例提供了多种方法来读取常用的值,比如年份/月份/星期几等. 如下所示

LocalDate date = LocalDate.of(2014, 3, 18);
int year = date.getYear();  //2014
Month month = date.getMonth(); //MARCH --3月份
int monthValue = date.getMonthValue();//3
int day = date.getDayOfMonth(); //18
DayOfWeek dow = date.getDayOfWeek(); //TUESDAY
int i = date.lengthOfMonth(); //31 days in march
boolean leap = date.isLeapYear(); //是否是闰年?不是闰年

我们还可以使用工厂方法直接从系统时钟中获取当前的日期:

LocalDate now = LocalDate.now();

还有其他类提供了类似的工厂方法我们还可以通过传递一个TemporalField参数给get方法拿到同样的信息,TemporalField是一个接口,定义了如何访问temporal对象某个字段的值. ChronoField枚举实现了这一接口,所以你可以很方便的使用get方法得到枚举元素的值,如下所示

LocalDate d = LocalDate.now();
int i = d.get(ChronoField.YEAR);
int mouth=d.get(ChronoField.MONTH_OF_YEAR);
int day=d.get(ChronoField.DAY_OF_MONTH);

一天中的时间,比如14:48:05,可以用LocalTime类表示 你可以使用of重载的两个工厂方法创建LocalTime的实例. 第一个重载函数接收小时和分钟,第二个重载函数同时还接收秒. 同LocalDate一样,LocalTime类也提供了一些getter方法访问这些变量的值

LocalTime time = LocalTime.of(14, 48, 5);
int hour = time.getHour();
int minute = time.getMinute();
int second = time.getSecond();
System.out.println(time);

LocalDate和LocalTime都可以通过解析代表它们的字符串创建。使用静态方法parse,我们可以实现这一个目的:

LocalDate date = LocalDate.parse("2014-03-18");
LocalTime time1 = LocalTime.parse("13:45:20");

LocalDateTime类:

这个复合类名叫LocalDateTime,是LocalDate和LocalTime的合体。它同时表示了日期 和时间,但不带有时区信息,你可以直接创建,也可以通过合并日期和时间对象构造,如下所示。

LocalTime time = LocalTime.of(14, 48, 5);
LocalDate date =LocalDate.now();
LocalDateTime dt1 = LocalDateTime.of(date, time);
LocalDateTime dt2 = LocalDateTime.of(2022, Month.JANUARY, 6, 14, 59, 19);
LocalDateTime dt3 = date.atTime(time);
LocalDateTime dt4 = date.atTime(14, 59, 20);
LocalDateTime dt5 = time.atDate(date);

操纵/解析和格式化日期

假如我们已经有一个LocalDate对象,想要创建它的一个修改版,最简单也最直接的方法是使用withAttribute方法. withAttribute方法会创建对象的一个副本,并按照需要修改它的属性. 注意,下面的这段代码中所有的方法都返回一个修改了属性的对象 它们都不会修改原来的对象

LocalDate date1=LocalDate.of(2022,1,6);
LocalDate date2 = date1.withYear(2023);
LocalDate date3 = date2.withDayOfMonth(25);
LocalDate date4 = date3.with(ChronoField.MONTH_OF_YEAR, 9);

还可以以声明的方式操纵LocalDate对象. 比如,你可以像下面这段代码那样加上或者减去一段时间

LocalDate date1 = LocalDate.of(2014, 3, 18);
LocalDate date2=date1.plusDays(1);
LocalDate date3=date2.minusYears(3);
date3.plus(6, ChronoUnit.MONTHS);

打印输出及解析日期-时间对象

使用Java.time.format包

这个包中,最重要的类是DateTime-Formatter 创建格式器最简单的方法是通过它的静态工厂方法以及常量 像BASIC_ISO_DATE和ISO_LOCAL_DATE这样的常量是DateTimeFormatter 类的预定义实例。所有的 DateTimeFormatter实例都能用于以一定的格式创建代表特定日期或时间的字符串。比如,下 面的这个例子中,我们使用了两个不同的格式器生成了字符串:

LocalDate date =LocalDate.now();
String s1 = date.format(DateTimeFormatter.BASIC_ISO_DATE); //20220106
String s2 = date.format(DateTimeFormatter.ISO_LOCAL_DATE); //2014-03-18
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值