由于SimpleDateFormat是线程不安全的,所以在多线程中可以使用线程安全的DateTimeFormatter 代替 SimpleDateFormat。
阿里巴巴java开发手册推荐:如果是 JDK8 的应用,可以使用 Instant 代替 Date,LocalDateTime 代替 Calendar, DateTimeFormatter 代替 SimpleDateFormat。
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss,SSS");
DateTimeFormatter formatter3 = DateTimeFormatter.ISO_LOCAL_DATE_TIME; // 2011-12-03T10:15:30
// LocalDateTime 时间加减
LocalDateTime nowTime = LocalDateTime.now();
LocalDateTime plusTime = nowTime.plusSeconds(20);
LocalDateTime minusTime = nowTime.minusSeconds(20);
// LocalDateTime自定义时间
LocalDateTime inputTime = LocalDateTime.of(2019, 6, 30, 13, 59, 59);
System.out.println("nowTime:"+nowTime);
System.out.println("plusTime:"+plusTime);
// LocalDateTime转成String
System.out.println("minusTime:"+minusTime.format(formatter));
System.out.println("inputTime:"+inputTime.format(formatter));
// String 转成LocalDateTime
LocalDateTime stringToLocalDateTime = LocalDateTime.parse("2019-12-12 12:12:12,222", formatter);
System.out.println("stringToLocalDateTime:"+stringToLocalDateTime);
// LocalDateTime 转成Date
Date toDate = Date.from(plusTime.atZone(ZoneId.systemDefault()).toInstant());
System.out.println("LocalDateTime to Date:"+toDate);
// Date 转成LocalDateTime
LocalDateTime toLocalDateTime = LocalDateTime.ofInstant(toDate.toInstant(), ZoneId.systemDefault());
System.out.println("Date to LocalDateTime:"+toLocalDateTime);
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// LocalDate时间加减
LocalDate nowDate = LocalDate.now();
LocalDate plusDays = nowDate.plusDays(10);
LocalDate minusDays = nowDate.minusDays(10);
// 自定义日期
LocalDate inputDate = LocalDate.of(2019, 12, 12);
// String转成LocalDate
LocalDate parse = LocalDate.parse("2019-01-01");
LocalDate parse2 = LocalDate.parse("2019-01-01",formatter2);
System.out.println("nowDate:"+nowDate);
System.out.println("plusDays:"+plusDays);
// LocalDate转成String
System.out.println("minusDays:"+minusDays.format(formatter2));
System.out.println("inputDate:"+inputDate.format(formatter2));
System.out.println("parse:"+parse);
System.out.println("parse2:"+parse2);
// LocalDate转Date
Date date = Date.from(parse2.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
System.out.println("date:"+date);
// Date 转LocalDate
LocalDate localDate = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toLocalDate();
System.out.println("localDate:"+localDate);
// Date 转LocalTime
LocalTime localTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toLocalTime();
System.out.println("localTime:"+localTime);
// ZonedDateTime
ZonedDateTime zdt = ZonedDateTime.now();
System.out.println("ZonedDateTime:"+zdt);
// Instant
Instant ins = Instant.now();
System.out.println("Instant:"+ins);
}
运行结果:
nowTime:2019-08-19T22:08:36.484
plusTime:2019-08-19T22:08:56.484
minusTime:2019-08-19 22:08:16,484
inputTime:2019-06-30 13:59:59,000
stringToLocalDateTime:2019-12-12T12:12:12.222
LocalDateTime to Date:Mon Aug 19 22:08:56 CST 2019
Date to LocalDateTime:2019-08-19T22:08:56.484
nowDate:2019-08-19
plusDays:2019-08-29
minusDays:2019-08-09
inputDate:2019-12-12
parse:2019-01-01
parse2:2019-01-01
date:Tue Jan 01 00:00:00 CST 2019
localDate:2019-01-01
localTime:00:00
ZonedDateTime:2019-08-21T09:24:10.781+08:00[Asia/Shanghai]
Instant:2019-08-21T01:24:10.781Z