文章目录
- 第一代日期类 Date
- 常用构造方法
- SimpleDateFormat 日期格式化类
- 日期转字符串(String -> Date)
- 字符串转日期 (String->Date)
- 第二代日期类 Calendar
- 常用字段与如何得到实例对象
- 相关 API
- 第三代日期类(LocalDate\TIme)
- 日期,时间,日期时间
- 日期时间格式化(DateTimeFormatter)
- 时间戳
- 计算时间(Time)对象间隔(Duration)
- 计算日期(Date)对象间隔 (Period)
- 日期(Date)矫正器(TemporalAdjusters)
第一代日期类 Date
常用构造方法
第一种:Date()
第二种:Date(long 毫秒)
public class Main {public static void main(String[] args) throws ParseException {//默认国外形式Date date = new Date();System.out.println(date);//创建了一个代表从1970年1月1日00:00:00 GMT开始后的1000毫秒的日期和时间。//但是输出 toString 的时候它会显示当前系统所在时区的时间。//因此,如果你的系统位于东八区(例如中国标准时间),那么输出将会是 "08:00:00"Date date1 = new Date(1000);System.out.println(date1);}
}
1000 是 一秒,1000 * 60 就是 60秒,1000 * 60 * 10 就是 10分钟
SimpleDateFormat 日期格式化类
日期转字符串(String -> Date)
用 String format(Date date) 方法转成字符串
public class Main {public static void main(String[] args) throws ParseException {Date date = new Date();//y:年份,M:年中月份,d:月中日期,F:星期, H:一天中的小时,m:小时中的分钟SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 星期F HH:mm");//转成字符串String date1 = sdf.format(date);//输出2024-06-28 星期 4 22:42System.out.println(date1);}
}
字符串转日期 (String->Date)
用 Date parse(String source) 转成 Date
public class Main {public static void main(String[] args) throws ParseException {String data = "2024-6-28 星期5 22:49";//格式和上面对不上会报 parseException 异常 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 星期F HH:mm");Date date = sdf.parse(data);System.out.println(data);}
}
格式和上面对不上会报 parseException 异常
第二代日期类 Calendar
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR, MONTH, DAY_OF_MONTH, HOUR 等 日期字段 之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法
常用字段与如何得到实例对象
Calender 没有专门的格式化方法,需要程序员自己组合
public class Main {public static void main(String[] args) throws ParseException {Calendar calendar = Calendar.getInstance();System.out.println(calendar);//底层是这样的:public static final int YEAR = 1;int year = calendar.get(1);int year2 = calendar.get(Calendar.YEAR);System.out.println(year);System.out.println(year2);}
}
相关 API
public class Main {public static void main(String[] args) throws ParseException {Calendar calendar = Calendar.getInstance();//把年设置成 2004calendar.set(Calendar.YEAR, 2004);System.out.println(calendar.get(Calendar.YEAR));//加一年calendar.add(Calendar.YEAR, -1);System.out.println(calendar.get(Calendar.YEAR));//关联日期String strDate = "2008-05-20 15:30:30";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = sdf.parse(strDate);calendar.setTime(date);System.out.println(calendar.get(Calendar.YEAR));}
}
第三代日期类(LocalDate\TIme)
JDK 8 加入的
LocalDate (日期/年月日),LocalTime (时间/时分秒),LocalDateTime (日期时间)
老日期类,线程不安全, 新的支持线程安全,建议直接用这个就行
日期,时间,日期时间
public class Main {public static void main(String[] args) throws ParseException {//获取当前日期LocalDateTime ldt = LocalDateTime.now();System.out.println(ldt);//获取指定日期时间LocalDateTime ldt2 = LocalDateTime.of(2024,6,29,10,10);System.out.println(ldt);//加减日期ldt2 = ldt2.plusYears(2).plusYears(-1);System.out.println(ldt2);//获取年int year = ldt2.getYear();System.out.println(year);}
}
日期时间格式化(DateTimeFormatter)
public class Main {public static void main(String[] args) throws ParseException {//LocalDateTime -> StringLocalDateTime localDateTime = LocalDateTime.now();DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");String s = dtf.format(localDateTime);System.out.println(s);//String -> LocalDateTimeString date = "2024-06-29";DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");//格式不对会抛 parse 异常LocalDate localDate = LocalDate.parse(date, dtf2);System.out.println(localDate);}
}
如果是 LocalDateTime 必须要包含时间和日期
时间戳
时间戳:1970年1月1日零时零分零秒,到系统当前时间的总毫秒数
public class Main {public static void main(String[] args) throws ParseException {//获取系统当前时间(UTC:全球标准时间)Instant instant = Instant.now();//获取时间戳long cuo = instant.toEpochMilli();System.out.println(cuo);}
}
计算时间(Time)对象间隔(Duration)
public class Main {public static void main(String[] args) throws ParseException {LocalDateTime time1 = LocalDateTime.of(2024, 6,29,8,8);LocalDateTime time2 = LocalDateTime.of(2023, 5,27,8,8);//两时间对象相差对少天//后面 - 前面Duration duration = Duration.between( time2,time1);System.out.println(duration.toDays());//两时间相差多少天System.out.println(duration.toHours());}
}
计算日期(Date)对象间隔 (Period)
public class Main {public static void main(String[] args) throws ParseException {LocalDate localDate1= LocalDate.of(2007, 7,7);LocalDate localDate2 = LocalDate.of(2008, 7,7);Period between = Period.between(localDate1, localDate2);//相差年数System.out.println(between.getYears());}
}
日期(Date)矫正器(TemporalAdjusters)
public class Main {public static void main(String[] args) throws ParseException {//获取系统当前时间LocalDateTime now = LocalDateTime.now();//矫正时间LocalDateTime localDateTime = now.with(TemporalAdjusters.lastDayOfMonth());System.out.println(localDateTime);}
}