Date 类大部分被废弃(不利于国际化),用日期格式化类来格式化日期
作用:格式化日期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String format = dateFormat.format(new Date()); System.out.println(format);
Date parse = dateFormat.parse("2019-09-01 12:22:23"); System.out.println(parse);
|
日期常用格式化模式:
| 格式 | 结果 |
|---|
| “yyyy.MM.dd G ‘at’ HH:mm:ss z” | 2001.07.04 AD at 12:08:56 PDT |
| “EEE, MMM d, ‘’yy” | Wed, Jul 4, ‘01 |
| “h:mm a” | 12:08 PM |
| “hh ‘o’’clock’ a, zzzz” | 12 o’clock PM, Pacific Daylight Time |
| “K:mm a, z” | 0:08 PM, PDT |
| “yyyyy.MMMMM.dd GGG hh:mm aaa” | 02001.July.04 AD 12:08 PM |
| “EEE, d MMM yyyy HH:mm:ss Z” | Wed, 4 Jul 2001 12:08:56 -0700 |
| “yyMMddHHmmssZ” | 010704120856-0700 |
| “yyyy-MM-dd’T’HH:mm:ss.SSSZ” | 2001-07-04T12:08:56.235-0700 |
| “yyyy-MM-dd’T’HH:mm:ss.SSSXXX” | 2001-07-04T12:08:56.235-07:00 |
| “YYYY-‘W’ww-u” | 2001-W27-3 |

两个 Date 类的使用
三天打鱼两天晒网练习题
从 1990-01-01 到任意日期需要打多少天鱼和晒多少天网?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public void countDays() throws ParseException { String dateStr1 = "1990-01-01"; String dateStr2 = "1990-01-07"; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date1 = dateFormat.parse(dateStr1); Date date2 = dateFormat.parse(dateStr2); long dayNums = (date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24); long times = dayNums / 5; long leftDays = dayNums % 5; long fishDays = times * 3; long netDays = (times * 2); if (leftDays > 3) { fishDays += 3; netDays += leftDays - 3; } else { fishDays += leftDays; } System.out.println("打鱼总共:"+fishDays+" 晒网:"+netDays); }
|
JDK 的 Date 类和 Calendar 类的问题
可变性:日期和时间的类应该不可变
偏移性:Date 中的年份从 1990 开始计算,月份从 0 开始
格式化:Calendar 不能格式化
线程不安全
JDK8 的新增日期 API
LocalDate、LocalTIme、LocalDateTime 类
常用 API

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime = LocalDateTime.now(); LocalTime localTime = LocalTime.now();
System.out.println(localDate); System.out.println(localDateTime); System.out.println(localTime); System.out.println("-------------------");
LocalDate localDate1 = LocalDate.of(2000, 1, 1); LocalTime localTime1 = LocalTime.of(23, 59); LocalDateTime localDateTime1 = LocalDateTime.of(localDate1, localTime1); System.out.println(localDate1); System.out.println(localTime1); System.out.println(localDateTime1);
|
Instant 类
**记录从 1970 年到指定时间经历的毫秒数 **
常用 API

1 2 3 4 5 6 7 8 9
|
Instant instant = Instant.now();
System.out.println(instant);
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); System.out.println(offsetDateTime);
|
常用 API

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 27 28 29 30 31 32 33 34 35 36 37 38 39
| DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
LocalDateTime localDateTime = LocalDateTime.now(); String str1 = formatter.format(localDateTime); System.out.println(localDateTime); System.out.println(str1);
TemporalAccessor parse = formatter.parse("2019-02-18T15:42:18.797"); System.out.println(parse);
DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
String str2 = formatter1.format(localDateTime); System.out.println(str2);
DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
String str3 = formatter2.format(LocalDate.now()); System.out.println(str3);
DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
String str4 = formatter3.format(LocalDateTime.now()); System.out.println(str4);
TemporalAccessor accessor = formatter3.parse("2019-02-18 03:52:09"); System.out.println(accessor);
|
日期 API

日期时间类转换
