Java日期时间类
- Date
- new Date()**获取当前系统时间**
- 通过**指定毫秒数得到时间**
- format**指定日期格式**
- SimpleDateFormat的模式字母:
- parse()可以把**格式化的String转成对应Date**
- Calendar(日历)
- 创建日期类对象
- 获取日历对象的某个日历字段
- 第三代日期
- 1.LocalDateTime
- 使用now()返回表示当前日期时间的对象
- LocalDateTime各种方法获取所需时间
- LocalDate与LocalTime
- 2.DateTimeFormatter对象进行格式化
- 3.Instant时间戳
- now返回当前Instant对象
- 通过from把Instant转为Date
- 通过date的toInstant()把date转为Instant对象
- 更多方法
⭐ 更多干货请点击此处
Date
- date精确到毫秒,代表特定的瞬间
- SimpleDateFormat:格式和解析日期的类。SimpleDateFormat格式化日期的具体类。它允许进行格式化(日期–>文本)、解析(文本–>日期)和规范化
需要引入java.util.Date
new Date()获取当前系统时间
Date d1 = new Date(); //获取当前系统时间
System.out.println("当前日期="+d1); //默认输出格式是国外方式,需要格式转换
输出
通过指定毫秒数得到时间
Date d2 = new Date(9234567);
System.out.println("当前日期"+d2);
输出
format指定日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
String format = sdf.format(d1); //format:将日期转换成指定格式的字符串
System.out.println("当前日期="+d1);
输出
SimpleDateFormat的模式字母:
parse()可以把格式化的String转成对应Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
String s = "1996年01月01日 10:20:30 星期一";
Date parse = sdf.parse(s); //使用的sdf格式需要和给的String格式应用,否则抛出转换异常
System.out.println("parse="+parse); //默认国外形式
System.out.println("parse="+sdf.format(parse)); //转成自定义
输出
Calendar(日历)
- 第二代日期类主要就是Calendar类
public abstract class Calendar extends Object implements Serializable,Cloneable,Comparable<Calendar>
- Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期日期)提供了一些方法
- new不出来,构造器是private,必须通过**getInstance()**来获取示例
需要引入java.util.Calendar
创建日期类对象
Calendar c = Calendar.getInstance();
System.out.println("c="+c);
输出
获取日历对象的某个日历字段
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));//若要用24小时法,改为 HOUR_OF_DAY
System.out.println("分钟:"+c.get(Calendar.MINUTE));
System.out.println("秒:"+c.get(Calendar.SECOND));
//没专门的格式化方法,需要自己组合
输出
第三代日期
-
前两代日期类的不足:
JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引Calendar类之后被弃用了。而Calendar也存在问题:- 可变性:像日期和时间这样的类应该是不可变的。
- 偏移性:Date中的年份是从1900开始的,而月份都从0开始。
- 格式化:格式化只对Date有用,Calendar则不行。
- 此外,它们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)。
-
第三代日期类常见方法:JDK8加入
- LocalDate(日期/年月日)
- LocalTime(时间/时分秒)
- LocalDateTime(日期时间/年月日时分秒)
1.LocalDateTime
使用now()返回表示当前日期时间的对象
LocalDateTime ldt = LoaclDateTime.now(); //LoaclDate.now();//LoaclTime.now();
System.out.println(ldt);
输出
LocalDateTime各种方法获取所需时间
LocalDateTime ldt = LoaclDateTime.now(); //LoaclDate.now();//LoaclTime.now();
System.out.println("年=" + ldt.getYear());
System.out.println("月=" + ldt.getMonth());
System.out.println("月=" + ldt.getMonthValue());
System.out.println("日=" + ldt.getDayOfMonth());
System.out.println("时=" + ldt.getHour());
System.out.println("分=" + ldt.getMinute());
System.out.println("秒=" + ldt.getSecond());
输出
LocalDate与LocalTime
LocalDate ld = LocalDate.now(); //可以获取年月日
LocalTime lt = LocalTime.now(); //可以获取时分秒
2.DateTimeFormatter对象进行格式化
类似SimpleDateFormat
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(格式);String str = dtf.format(日期对象);
LocalDateTime ldt = LoaclDateTime.now();DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒");String format = dateTimeFormatter.format(ldf);System.out.println("格式化的日期=" + format);
输出
3.Instant时间戳
类似Date
提供了一系列和Date类转换的方式
Instant–>Date:
Date date = Date.from(instant);
Date–>Instant
Instant instant = date.toInstant();
now返回当前Instant对象
Instant now = Instant.now();
System.out.println(now);
输出
通过from把Instant转为Date
Date date = Date.from(now);
通过date的toInstant()把date转为Instant对象
Instant instant = date.toInstant();
更多方法
- LocalDateTime类
- MonthDay类:检查重复事件
- 是否是闰年
- 增加日期的某个部分
- 使用plus方法测试增加时间的某个部分
- 使用minus方法测试查看一年前和一年后的日期