第一代日期类:Date
将日期转化成格式化的字符串
1 2 3 4 5
| Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); String format = sdf.format(date); 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); System.out.printLn(parse);
|
String转Date时,使用的sdf格式需要和所给的String的格式一样,否则会抛出转换异常
第二代日期类:Calendar
1 2 3 4 5 6 7 8 9
| Calendar c = Calendar.getInstance();
System.out.println("年:" +c.get(Calendar.YEAR)); System.out.println("月:" +(c.get(Calendar.MONTH)+1)); System.out.println("日:" +c.get(Calendar.DAY_OF_MONTH)); System.out.println("小时:" +c.get(Calendar.HOUR)); System.out.println("小时:" +c.get(Calendar.HOUR_OF_DAY)); 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(); System.out.println(instant); Date date1 = Date.from(instant); Instant instant1 = date1.toInstant();
|