【Java-Day18】API篇-时间类(旧版时间类:Date/SimpleDateFormat/Calendar)

【Java-Day18】API篇-时间类(旧版时间类:Date/SimpleDateFormat/Calendar) 前言时间类分为新版时间类JDK8之后和旧版时间类JDK8之前。旧版时间类所在包java.util、java.text包括Date、SimpleDateFormat、Calendar新版时间类所在包java.time及其子包。包括LocalDate、LocalTime、LocalDateTime、DateTimeFormatter、Instant一.Date时间Date类是一个JDK写好的Javabean类用来描述时间精确到毫秒。利用空参构造创建的对象默认表示系统当前时间。利用有参构造创建的对象表示指定的时间。1.1 创建对象表示一个时间new Date()Date t1 new Date();//Mon Jun 01 21:18:26 CST 20261.2 创建一个对象表示一个指定的时间new Date(指定毫秒值)Date t2 new Date(1000);//Thu Jan 01 08:00:01 CST 1970表示纪元时间后1000毫秒的时间1970-01-01 08:00:01。1.3 setTime(L)修改时间setTime(毫秒值)修改 t1 这个 Date 对象的时间戳把它改成 2000毫秒setTime()没有返回值直接修改t1时间戳t1.setTime(2000L); System.out.println(t1);//Thu Jan 01 08:00:02 CST 19701.4 getTime()获取当前时间的毫秒值getTime()作用是返回该Date对象对应的毫秒时间戳。返回值类型是long类型。通过getTime可以将时间进行计算和比较。long time t1.getTime(); System.out.println(time);//1780320689063二.SimpleDateFormat 格式化时间Date类可以获取当前时间但格式不太适合中文阅读。如果想把 Date 格式化成我们熟悉的样子可以用SimpleDateFormat。2.1 SimpleDateFormat类作用1.格式化把时间变成我们喜欢的格式。比如2026年6月1日2026-6-1常见格式格式含义yyyy年MM月dd日HH24小时制mm分钟ss秒2.解析把字符串表示的时间变成Date对象。变回时间对象后可以用getTime对时间进行计算比较2.2 创建SimpleDateFormate对象/成员方法构造方法说明publicSimpleDateFormat()构造一个 SimpleDateFormat使用默认格式publicSimpleDateFormat(String pattern)构造一个 SimpleDateFormat使用指定的格式常用方法说明public final Stringformat(Date date)格式化日期对象转字符串返回日期字符串public Dateparse(String source)解析字符串转日期对象2.2.1 空参构造SimpleDateFormat sdf new SimpleDateFormat(); Date date new Date(); String s sdf.format( date); System.out.println(s);//2026/6/1 21:502.2.2 带参构造SimpleDateFormat sdf new SimpleDateFormat(yyyy年MM月dd日 HH:mm:ss); Date date new Date(); String s2 sdf.format( date); System.out.println(s2);//2026年06月01日 21:53:18三.Canlendar日历Calendar代表了系统当前时间的日历对象它可以获取、修改、计算日期中的年、月、日、时、分、秒。所在包import java.util.Calendar;Calendar是一个抽象类不能直接创建对象。3.1 为什么需要CanlendarDate 可以表示一个时间但它不太方便单独操作年、月、日。如果你想知道今年是哪一年当前月份当前是几号给当前日期加 10 天把年份改成 2030。用 Date 不方便我们可以用 Calendar 来处理这些操作。3.2 获取Canlendar日历类对象的方法构造方法方法名说明public static Calendar getInstance()获取当前时间的日历对象Calendar 是抽象类不能直接 new 一个对象出来。需要通过静态方法获取// 获取当前时间对应的日历对象 Calendar c Calendar.getInstance();打印c会得到一串数组包括时间的纪元年月日时分秒星期等等。常用方法方法名说明public final DategetTime()获取日期对象public final voidsetTime(Date date)给日历设置日期对象public longgetTimeInMillis()拿到时间毫秒值public voidsetTimeInMillis(long millis)给日历设置时间毫秒值public intget(int field)取日历中的某个字段信息public voidset(int field, int value)修改日历的某个字段信息public voidadd(int field, int amount)为某个字段增加或减少指定的值3.3 获取年月日日历对象获取到月份范围是0~110代表1月11代表12月。日历对象获取的星期范围1代表星期日2代表星期1......Calendar c Calendar.getInstance(); int year c.get(Calendar.YEAR); int month c.get(Calendar.MONTH) 1; int day c.get(Calendar.DAY_OF_MONTH); System.out.println(year 年 month 月 day 日);//2026年6月2日3.4修改日期 set()Calendar c Calendar.getInstance(); // 设置年份为 2030 c.set(Calendar.YEAR, 2030); int year c.get(Calendar.YEAR); System.out.println(year);//2030也可以一次设置年月日Calendar c Calendar.getInstance(); // 设置年份为 2030 c.set(2027, 5, 1); int year c.get(Calendar.YEAR); int month c.get(Calendar.MONTH)1;//真正的月份需要1 int day c.get(Calendar.DAY_OF_MONTH); System.out.println(year, month , day);//2027,6,13.5 日期计算add()add() 可以对日期做加减。给当前日期加10天c.add(Calendar.DAY_OF_MONTH, 10);也可以减10天加月份加年份c.add(Calendar.DAY_OF_MONTH, -10); c.add(Calendar.MONTH, 1); c.add(Calendar.YEAR, 1);3.6Calendar 和 Date 互相转换Calendar 转 DateDate date c.getTime();Date 转 CalendarCalendar c Calendar.getInstance();3.7Calendar 常用字段字段说明Calendar.YEAR年Calendar.MONTH月范围是 0 ~ 11Calendar.DAY_OF_MONTH一个月中的第几天Calendar.HOUR12小时制Calendar.HOUR_OF_DAY24小时制Calendar.MINUTE分钟Calendar.SECOND秒Calendar.DAY_OF_WEEK一周中的第几天Calendar 注意事项1. Calendar 是抽象类不能直接 new。2. 获取对象用 Calendar.getInstance()。3. 月份从 0 开始使用时通常要 1。4. DAY_OF_WEEK 中星期日是 1。5. Calendar 是旧版时间 API现在新项目更推荐 java.time 包。