Java日期操作(LocalDate,LocalDateTime,DateTimeFormatter)

前言

原本都是使用SimpleDateFormat,Date,Calendar 来操作日期

后来听说
SimpleDateFormat并不香,线程不安全
Date输出不美观
Calendar方便Date的

DateTimeFormatter线程安全
LocalDateLocalDateTime可对不同格式进行操作

  • LocalDate操作’yyyy-MM-dd’不包含时分秒的数据
  • LocalDateTime操作’yyyy-MM-dd HH-mm-ss.SSS’操作更细化

获取当前时间

1
2
3
4
5
6
7
//获取当前日期
LocalDate nowDate = LocalDate.now();
System.out.println(nowDate);// 2019-12-24

//获取当前日期+时间
LocalDateTime nowDateTime = LocalDateTime.now();// 2019-12-24T17:04:00.677
System.out.println(nowDateTime);

String与LocalDate,LocalDateTime转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//LocalDate -> String 指定格式
String localDateToString = DateTimeFormatter.ofPattern("yyyy.MM.dd").format(LocalDate.now());
System.out.println(localDateToString);// 2019.12.24

//LocalDateTime -> String 指定格式
String nowDateTimeFormat = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:hh:ss.SSS").format(LocalDateTime.now());
System.out.println(nowDateTimeFormat);// 2019.12.24 17:05:47.113

//String -> LocalDate 指定格式
LocalDate stringToLocalDate = LocalDate.parse("2019-12-19", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(stringToLocalDate);// 2019-12-19

//String -> LocalDateTime 指定格式
LocalDateTime stringToLocalDateTime = LocalDateTime.parse("2019-12-19 17:32:20.451", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println(stringToLocalDateTime);// 2019-12-19T17:32:20.451

//LocalDateTime -> LocalDate 反之不可转
LocalDate localDate = LocalDateTime.now().toLocalDate();
System.out.println(localDate);// 2019-12-24

Date与LocalDate,LocalDateTime转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//LocalDate -> Date
Date localDateToDate = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());
System.out.println(localDateToDate);// Tue Dec 24 00:00:00 CST 2019

//Date -> LocalDate
LocalDate localDateFromDate = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println(localDateFromDate);// 2019-12-24

//LocalDateTime -> Date
Date localDateTimeToDate = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
System.out.println(localDateTimeToDate);// Tue Dec 24 17:17:10 CST 2019

//Date -> LocalDateTime
LocalDateTime localDateTimeFromDate = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println(localDateTimeFromDate);// 2019-12-24T17:17:10.079

Long毫秒值与LocalDateTime转换

1
2
3
4
5
6
7
long currentTimeMillis = System.currentTimeMillis();
System.out.println(currentTimeMillis);// 1583517566916

LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeMillis), ZoneId.systemDefault());
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS").format(localDateTime));// 2020-03-07 01:59:26.916
// 转换为毫秒值
System.out.println(localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());// 1583517566916

时间修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//LocalDate修改,LocalDateTime也同理
LocalDate localDateInit = LocalDate.parse("2019-12-19", DateTimeFormatter.ofPattern("yyyy-MM-dd"));

// 先增加1年 -> 2020-12-19
LocalDate plusYears = localDateInit.plusYears(1);

// 再增加6个月 -> 2021-06-19
LocalDate plusMonths = plusYears.plusMonths(6);

// 再增加20天 -> 2021-07-09
LocalDate plusDays = plusMonths.plusDays(20);

//简写,拼接 -> 2021-07-09
LocalDate localDateSimple = localDateInit.plusYears(1).plusMonths(6).plusDays(20);

// 减少年月日,返回 LocalDate
localDateInit.minusYears(1);
localDateInit.minusMonths(1);
localDateInit.minusDays(1);

// 获取年月日,返回int
localDateInit.getYear();
localDateInit.getMonth().getValue();
localDateInit.getDayOfWeek();
localDateInit.getDayOfMonth();
localDateInit.getDayOfYear();

一张图片

在这里插入图片描述

插入数据库时间

Oracle

1
2
3
4
5
6
7
8
9
10
11
12
datecol为Date类型
insert into tabname(datecol) value(sysdate) ; -- 用date值

insert into tabname(datecol) value(sysdate+1) ; -- 用date值

insert into tabname(datecol) value(to_date('2014-02-14','yyyy-mm-dd')) ; -- 用to_date

insert into tabname(datecol) value(to_date('2014-02-14 20:47:00','yyyy-mm-dd hh24:mi:ss')) ; -- 用to_date

insert into tabname(datecol) value(to_date('20140214','yyyymmdd')) ; -- 用to_date

insert into tabname(datecol) value(to_date('20140214204700','yyyymmddhh24miss')) ; -- 用to_date

MySQL

1
2
date1为Date类型 datetime1为datetime类型
insert into student(date1,datetime1) values ('2020-05-08','2020-05-08 18:31:20');