JDK8的LocalDateTime用法

作者: adm 分类: java 发布时间: 2021-08-16 09:30

 Java8全新的日期和时间API

1.1 LocalDate

LocalDate是日期处理类,具体API如下:

// 获取当前日期
LocalDate now = LocalDate.now();
// 设置日期
LocalDate localDate = LocalDate.of(2019, 9, 10);
// 获取年
int year = localDate.getYear(); //结果:2019
int year1 = localDate.get(ChronoField.YEAR); //结果:2019
// 获取月
Month month = localDate.getMonth(); // 结果:SEPTEMBER
int month1 = localDate.get(ChronoField.MONTH_OF_YEAR); //结果:9
// 获取日
int day = localDate.getDayOfMonth(); //结果:10
int day1 = localDate.get(ChronoField.DAY_OF_MONTH); // 结果:10
// 获取星期
DayOfWeek dayOfWeek = localDate.getDayOfWeek(); //结果:TUESDAY
int dayOfWeek1 = localDate.get(ChronoField.DAY_OF_WEEK); //结果:2

1.2 LocalTime

  LocalTime是时间处理类,具体API如下:

// 获取当前时间
LocalTime now = LocalTime.now();
// 设置时间
LocalTime localTime = LocalTime.of(13, 51, 10);
//获取小时
int hour = localTime.getHour(); // 结果:13
int hour1 = localTime.get(ChronoField.HOUR_OF_DAY); // 结果:13
//获取分
int minute = localTime.getMinute(); // 结果:51
int minute1 = localTime.get(ChronoField.MINUTE_OF_HOUR); // 结果:51
//获取秒
int second = localTime.getSecond(); // 结果:10
int second1 = localTime.get(ChronoField.SECOND_OF_MINUTE); // 结果:10

1.3 LocalDateTime

LocalDateTime可以设置年月日时分秒,相当于LocalDate + LocalTime

// 获取当前日期时间
LocalDateTime localDateTime = LocalDateTime.now();
//返回 2021-08-16T09:38:23.630
LocalDate localDate=LocalDate.now();
//返回 2021-08-16
LocalTime localTime=LocalTime.now();
//返回 09:38:23.629
// 设置日期 LocalDateTime 
localDateTime1 = LocalDateTime.of(2019, Month.SEPTEMBER, 10, 14, 46, 56);
//返回 2019-09-10T14:46:56
LocalDateTime localDateTime2 = LocalDateTime.of(localDate, localTime);
//返回 2021-08-16T09:45:07.694 
LocalDateTime localDateTime3 = localDate.atTime(localTime);
//返回 2021-08-16T09:45:07.694 
LocalDateTime localDateTime4 = localTime.atDate(localDate);
//返回 2021-08-16T09:45:07.694
// 获取LocalDate 
LocalDate localDate2 = localDateTime.toLocalDate();
//返回 2021-08-16
// 获取LocalTime 
LocalTime localTime2 = localDateTime.toLocalTime();
//返回 09:38:23.629

1.4 Instant

// 创建Instant对象
Instant instant = Instant.now();
//返回 2021-08-16T01:46:48.114Z
// 获取秒
long currentSecond = instant.getEpochSecond();
//返回 1629078408
// 获取毫秒
long currentMilli = instant.toEpochMilli();
//返回 1629078408114
如果只是为了获取秒数或者毫秒数,使用System.currentTimeMillis()来得更为方便

1.5 修改LocalDate、LocalTime、LocalDateTime、Instant

LocalDate、LocalTime、LocalDateTime、Instant为不可变对象,修改这些对象对象会返回一个副本。增加、减少年数、月数、天数等 以LocalDateTime为例。

// 创建日期:2019-09-10 14:46:56
LocalDateTime localDateTime = LocalDateTime.of(2019, Month.SEPTEMBER, 10, 14, 46, 56);
//增加一年
localDateTime = localDateTime.plusYears(1); //结果: 2020-09-10 14:46:56
localDateTime = localDateTime.plus(1, ChronoUnit.YEARS); //结果: 2021-09-10 14:46:56
//减少一个月
localDateTime = localDateTime.minusMonths(1); //结果: 2021-08-10 14:46:56
localDateTime = localDateTime.minus(1, ChronoUnit.MONTHS); //结果: 2021-07-10 14:46:56

通过with修改某些值,年月日时分秒都可以通过with方法设置

//修改年为2019
localDateTime = localDateTime.withYear(2020);
//修改为2022
localDateTime = localDateTime.with(ChronoField.YEAR, 2022);

日期计算。比如有些时候想知道这个月的最后一天是几号、下个周末是几号,通过提供的时间和日期API可以很快得到答案 。TemporalAdjusters提供的各种日期时间格式化的静态类,比如firstDayOfYear是当前日期所属年的第一天

LocalDate localDate = LocalDate.now();
LocalDate localDate1 = localDate.with(TemporalAdjusters.firstDayOfYear());

格式化时间。DateTimeFormatter默认提供了多种格式化方式,如果默认提供的不能满足要求,可以通过DateTimeFormatter的ofPattern方法创建自定义格式化方式

LocalDate localDate = LocalDate.of(2019, 9, 10);
//返回 2019-09-10
String s1 = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);
//返回 20190910
String s2 = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
//返回 2019-09-10
//自定义格式化
DateTimeFormatter dateTimeFormatter =   DateTimeFormatter.ofPattern("dd/MM/yyyy");
String s3 = localDate.format(dateTimeFormatter);
//返回 10/09/2019

解析时间。和SimpleDateFormat相比,DateTimeFormatter是线程安全的

LocalDate localDate1 = LocalDate.parse("20190910", DateTimeFormatter.BASIC_ISO_DATE);
//返回 2019-09-10
LocalDate localDate2 = LocalDate.parse("2019-09-10", DateTimeFormatter.ISO_LOCAL_DATE);

//返回 2019-09-10
LocalDateTime与String日期互相转换

DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime time = LocalDateTime.now();
String localTime = df.format(time);
LocalDateTime ldt = LocalDateTime.parse("2017-09-28 17:07:05",df);
System.out.println("LocalDateTime转成String类型的时间:"+localTime);
System.out.println("String类型的时间转成LocalDateTime:"+ldt);

 

控制台结果:

LocalDateTime转成String类型的时间:2017-09-30 10:40:06
String类型的时间转成LocalDateTime:2017-09-28T17:07:05

 

在使用Java程序操作数据库时,我们需要把数据库类型与Java类型映射起来。下表是数据库类型与Java新旧API的映射关系:


        

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!