第一代日期类:Date

将日期转化成格式化的字符串

1
2
3
4
5
// import java.util.Date;
Date date = new Date(); // 创建一个日期Date对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
String format = sdf.format(date); // 将date对象格式化返回给format字符串
System.out.println(format); // 输出格式化的日期

将格式化的字符串转化成日期

1
2
3
4
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
String s= "2003年2月20日 10时20分30秒"; // 格式化的字符串
Date parse = sdf.parse(s); // 将格式化的字符串转成日期对象返回给parse
System.out.printLn(parse); // 输出日期

String转Date时,使用的sdf格式需要和所给的String的格式一样,否则会抛出转换异常

字母 日期或时间元素 表示 示例
G Era 标志符 Text AD
y Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800

第二代日期类:Calendar

1
2
3
4
5
6
7
8
9
Calendar c = Calendar.getInstance();	// 创建日期对象,不可以使用new因为Calendar是抽象类

System.out.println("年:" +c.get(Calendar.YEAR));
System.out.println("月:" +(c.get(Calendar.MONTH)+1)); // 月是从0开始编号
System.out.println("日:" +c.get(Calendar.DAY_OF_MONTH));
System.out.println("小时:" +c.get(Calendar.HOUR)); // 输出12小时制的时
System.out.println("小时:" +c.get(Calendar.HOUR_OF_DAY)); // 输出24小时制的时
System.out.println("分钟:" +c.get(Calendar.MINUTE));
System.out.println("秒:" + c.get(Calendar.SECOND));

第三代日期类:

前两代日期类的不足

JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK1.1引入Calendar类之后被弃用了。而Calendar也存在问题是: 1. 可变性:像日期和时间这样的类应该是不可变的 2. 偏移性:Date中的年份是从1900开始的,而月份都从0开始 3. 格式化:格式化只对Date有用,Calendar则不行 4. 它们不是线程安全的,不能处理闰秒等(每隔2天,多出1秒)

第三代日期类对象的创建

  • LocalDateTime包含日期+时间字段
  • LocalDate只包含日期字段
  • LocalTime只包含时间字段
1
2
3
4
5
6
7
8
9
10
11
LocalDateTime ldt = LocalDateTime.now();	// 返回当前时刻日期时间对象
ldt.getYear();
ldt.getMonthValue();
ldt.getMonth(); // 返回纯大写英文月份
ldt.getDayOfMonth();
ldt.getHour();
ldt.getMinute();
ldt.getSecond();

LocalDate ld = LocalDate.now();
LocalDate lt = LocalTime.now();

格式日期类

1
2
3
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = dtf.format(ldt);
System.out.println(format);

时间戳

1
2
3
4
Instant instant = Instant.now();    // 通过静态方法now()获取当前时间戳对象
System.out.println(instant);
Date date1 = Date.from(instant); // 通过from方法将Instant转成Date
Instant instant1 = date1.toInstant(); // 通过toInstant方法将Date转成Instant