日期类
一、Date
精确到毫秒,代表特定的瞬间
SimpleDateFormat:格式和解析日期的类 允许进行格式化和规范化
public class Date_ {
public static void main(String[] args) throws ParseException {
Date date = new Date(); // 获取当前系统时间
System.out.println(date); // Sun Mar 06 19:34:33 CST 2022
Date date1 = new Date(348593524); // 通过毫秒数得到时间
System.out.println(date1); // Mon Jan 05 08:49:53 CST 1970
// 创建SimpleDateFormat对象,可以指定相应的格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy 年 MM 月 dd 日 hh:mm:ss E");
String format = simpleDateFormat.format(date1); // 日期转换成指定格式的字符串
System.out.println(format); //1970 年 01 月 05 日 08:49:53 星期一
// String->Date
String s = "2022 年 03 月 06 日 10:20:30 星期日";
Date parse = simpleDateFormat.parse(s);
System.out.println(parse); // Sun Mar 06 10:20:30 CST 2022
System.out.println(simpleDateFormat.format(parse)); // 2022 年 03 月 06 日 10:20:30 星期日
}
}
二、Calendar类
可变(日期时间这样的类应该不可变),年份从1900年开始,月份从0开始,不是线程安全的,不能处理闰秒
public class Calendar_ {
public static void main(String[] args) {
// 1. Calendar是一个抽象类,构造器是私有的,通过getIntance()获取实例
Calendar c = Calendar.getInstance();
System.out.println(c);//java.util.GregorianCalendar[time=1646615931793,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=2,WEEK_OF_YEAR=11,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,DAY_OF_YEAR=66,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=9,HOUR_OF_DAY=9,MINUTE=18,SECOND=51,MILLISECOND=793,ZONE_OFFSET=28800000,DST_OFFSET=0]
// 2. 获取某个日历字段
System.out.println("年 " + c.get(Calendar.YEAR));
System.out.println("月 " + (c.get(Calendar.MONTH)+1));// 月是从0开始的,要+1
System.out.println("日 " + c.get(Calendar.DAY_OF_MONTH));
System.out.println("时 " + c.get(Calendar.HOUR));//HOUR_OF_DATE 改成24进制
System.out.println("分 " + c.get(Calendar.MINUTE));
System.out.println("秒 " + c.get(Calendar.SECOND));
// 没有格式化类
}
}
三、LocalDate、LocalTime、LocalDateTime
LocalDate 年月日
LocalTime 时分秒
LocalDateTime 年月日时分秒
public class LocalDate_ {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now(); // 2022-03-07T09:33:35.163
System.out.println(localDateTime.getYear());
System.out.println(localDateTime.getMonth()); // MARCH
System.out.println(localDateTime.getMonthValue()); // 3
System.out.println(localDateTime.getHour());
System.out.println(localDateTime.getMinute());
System.out.println(localDateTime.getSecond());
LocalDate localDate = LocalDate.now(); // 2022-03-07
LocalTime localTime = LocalTime.now(); // 09:38:41.106
}
}
DateTimeFormatter格式日期类
public class LocalDate_ {
public static void main(String[] args) {
// now()返回表示当前日期时间的对象
LocalDateTime localDateTime = LocalDateTime.now(); // 2022-03-07T09:33:35.163
System.out.println(localDateTime.getYear());
System.out.println(localDateTime.getMonth()); // MARCH
System.out.println(localDateTime.getMonthValue()); // 3
System.out.println(localDateTime.getHour());
System.out.println(localDateTime.getMinute());
System.out.println(localDateTime.getSecond());
LocalDate localDate = LocalDate.now(); // 2022-03-07
LocalTime localTime = LocalTime.now(); // 09:38:41.106
// 使用DateTimeFormatter对象进行格式化
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒");
String format = dateTimeFormatter.format(localDateTime);
System.out.println(format); // 2022年03月07日 09小时48分钟09秒
// Instant时间戳
// 通过静态方法 now()获取表示当前时间戳的对象
Instant now = Instant.now();
System.out.println(now); // 2022-03-07T01:50:54.388Z
// 通过from把Instant转换成Date
Date date = Date.from(now);
// 通过date的toInstant()把date转成Instant对象
Instant instant = date.toInstant();
// plus和minus方法对当前时间进行加或者减
LocalDateTime localDateTime1 = localDateTime.plusDays(890);
// 890天后是
System.out.println("890天后是"+dateTimeFormatter.format(localDateTime1)); // 890天后是2024年08月13日 10小时00分钟50秒
}
}