Date类
date类位于java.util 包中,用于表示特定的时间
public static void main(String[] args) { // 创建一个便是当前时间对象的Date对象 Date date = new Date(); System.out.println(date); // Fri Aug 25 21:29:18 CST 2023 // 获取date对象的时间 long timeInMillis = date.getTime(); System.out.println(timeInMillis); // 1692970158599 // 创建指定时间的Date对象 Date date1 = new Date(1392978158599L); //Fri Feb 21 18:22:38 CST 2014 System.out.println(date1); }
格式化Date对象
格式化一个Date对象,可以使用SimpleDateFormat类来指定所需的日期和时间格式。
SimpleDateFormat类时JAVA中用于日期和时间格式化的类,位于java.text包中。它允许将Date对象格式化为指定的日期和时间字符串,或者将时间和日期字符串解析为Date对象。
方法 | 描述 |
---|---|
SimpleDateFormate(String pattern) | 使用给定的模式字符串创建一个SimpleDateFormate对象 |
format(Date date) | 将给定的Date对象格式化为字符串,使用给定的模式 |
parse(String source) | 将给定的字符串解析为Date对象,使用指定的模式 |
applyPattern(String pattern) | 设置格式化模式,用于指定日期和时间的格式 |
toPattern() | 返回的当前的格式化模式 |
常用的格式化字符
-
yyyy:四位数的年份(例如 :1900)
-
MM:两位数的月份(01-12)
-
dd:两位数的日期(01-31)
-
HH:两位数的小时(00-23)
-
mm:两位数的分钟(00-59)
-
ss:两位数的秒钟(00-59)
//格式化Date对象 Date date = new Date(); //创建Simple对象并指定格式化模式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //格式化Date对象为字符串 String s = sdf.format(date); System.out.println(s);
Calendar类
calendar类是java中用于处理日期和时间的类,位于java.util包中。
它提供了一种比Date类更加灵活和功能强大的的日期和时间操作方式。
方法 | 描述 |
---|---|
get(int field) | 返回给定字段的值 |
set(int year, int month int day) | 设置年月日 |
setTime(Date date) | 使用给定的Date对象设置Calendear的时间 |
add(int field, int acount) | 給指定字段上添加或減少指定的值 |
getTime() | 返回一個Calender表示的对象 |
getTimelnMillis() | 返回自1970年1月1日以来的毫秒值 |
toString() | 返回一个Calendar表示的字符串 |
get(Calenar.ZONE_OFFSET) | 返回与GMT的时差 |
//Calendar 类 // 获取当前时间和日期的Calendar对象 Calendar calenar = Calendar.getInstance(); // 设置指定时间和日期 calenar.set(1970,1,1); // 获取年份 int year = calenar.get(Calendar.YEAR); // 获取月份 int month = calenar.get(Calendar.MONTH); System.out.println(month); // 获取是当月第几天 int day = calenar.get(Calendar.DAY_OF_MONTH); // 在月份上+1 calenar.add(Calendar.MONTH,1); // 输出Calendar对象 System.out.println(calenar.getTime()); // 将Calendar对象转换为Date对象 Date date = calenar.getTime(); System.out.println(date);
!!
calendar对象输出的月份与实际是有差异的
需要在其基础上加一月
!!
LocalDate类
// LocalDate对象 LocalDate ld = LocalDate.now(); LocalDate sd = LocalDate.of(1970,1,1); // 解析字符串为LocalDate对象 LocalDate parseDate = LocalDate.parse("1949-10-01"); System.out.println(parseDate); // 获取日期信息 int year = sd.getYear(); int month = sd.getMonthValue(); int day = sd.getDayOfMonth(); System.out.println(year); System.out.println(month); System.out.println(day); // 增加/减少日期 LocalDate sdNew = sd.plusDays(2); LocalDate sdNew1 = sd.plusDays(-1); System.out.println(sdNew1); // 判断日期关系 boolean before = sd.isBefore(ld); boolean after = ld.isAfter(sd); boolean equals = sd.isEqual(ld); System.out.println(before); System.out.println(after); System.out.println(equals); // 格式化日期 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String foma = sd.format(formatter); System.out.println(foma);
LocalTime类
LocalTime 类与LocaDate类类似,一个表示时间,一个表示日期
####
LocalDateTime类
获取当前时间
System.out.println("当前时间:" + LocalDateTime.now());
LocalDateTime转时间戳
System.out.println("LocalDateTime 转时间戳(毫秒):" + LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); System.out.println("LocalDateTime 转时间戳(秒):" + LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond());
格式化时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println("格式化后的日期:" + LocalDateTime.now().format(formatter));
获取当天时间的0点
System.out.println("当天的零点: " + LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MIN));
获取当前是星期几
System.out.println("今天是星期(英文): " + LocalDateTime.now().getDayOfWeek()); System.out.println("今天是星期(数字): " + LocalDateTime.now().getDayOfWeek().getValue());
获取年份
System.out.println("当前时间所属于的年份: " + LocalDateTime.now().getYear());
获取月份
System.out.println("当前时间所属于的月份: " + LocalDateTime.now().getMonth().getValue());
获取天
System.out.println("当前时间所属于的天: " + LocalDateTime.now().getDayOfMonth());
判断时间前后关系
LocalDateTime date = LocalDateTime.of(2022, 8, 14, 14, 10, 55); System.out.println("当前时间是否在 date 之前 " + LocalDateTime.now().isBefore(date)); System.out.println("当前时间是否在 date 之后 " + LocalDateTime.now().isAfter(date));
获取本周周一、周日
System.out.println("本周周一的日期:" + LocalDateTime.now().with(DayOfWeek.MONDAY).toLocalDate()); System.out.println("本周周一的日期:" + LocalDateTime.now().with(DayOfWeek.SUNDAY).toLocalDate());
获取上周周一、周日
System.out.println("上周周一:" + LocalDate.now().minusDays(7).with(DayOfWeek.MONDAY)); System.out.println("上周周日:" + LocalDate.now().minusDays(7).with(DayOfWeek.SUNDAY));
获取本月第一天
System.out.println("当月第一天:" + LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()));
获取当年第一天
System.out.println("当年第一天:" + LocalDate.now().with(TemporalAdjusters.firstDayOfYear()));
获取下个月第一天
System.out.println("下个月第一天:" + LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth()));
获取明年第一天
System.out.println("明年第一天:" + LocalDate.now().with(TemporalAdjusters.firstDayOfNextYear()));
构造时间
System.out.println("构造时间(2022-12-12 12:12:12):" + LocalDateTime.of(2022, 12, 12, 12, 12, 12));
判断两个时间是否相等
LocalDateTime date1 = LocalDateTime.of(2022, 8, 14, 12, 12, 12); LocalDateTime date2 = LocalDateTime.of(2022, 8, 14, 16, 12, 12); System.out.println("date1 == date2 ? " + date1.isEqual(date2));
时间戳转LocalDateTime
long timestamp = System.currentTimeMillis(); //时间戳转LocalDate LocalDate localDate = Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDate(); System.out.println("时间戳转LocalDate:" + localDate); //时间戳转LocalDateTime ocalDateTime localDateTime = Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDateTime(); System.out.println("时间戳转LocalDateTime:" + localDateTime);
增加年份、月份、天数、小时、分、秒
System.out.println("当前时间增加一年:" + LocalDateTime.now().plusYears(1));//减少使用minusYears System.out.println("当前时间增加一个月:" + LocalDateTime.now().plusMonths(1));//减少使用minusMonths System.out.println("当前时间增加一天:" + LocalDateTime.now().plusDays(1));//减少使用minusDays System.out.println("当前时间增加一个小时:" + LocalDateTime.now().plusHours(1));//减少使用minusHours System.out.println("当前时间增加一分钟:" + LocalDateTime.now().plusMinutes(1));//减少使用minusMinutes System.out.println("当前时间增加一秒钟:" + LocalDateTime.now().plusSeconds(1));//减少使用minusSeconds
修改年份、月份、天、小时、分钟、秒
System.out.println("修改年份,修改成2023年:" + LocalDateTime.now().withYear(2023)); System.out.println("修改月份,修改成1月份:" + LocalDateTime.now().withMonth(1)); System.out.println("修改天数,修改成15号:" + LocalDateTime.now().withDayOfMonth(15)); System.out.println("修改小时,修改成18点:" + LocalDateTime.now().withHour(18)); System.out.println("修改分钟,修改成50分钟:" + LocalDateTime.now().withMinute(50)); System.out.println("修改秒,修改成30秒:" + LocalDateTime.now().withSecond(30));
获取两个时间的间隔
LocalDate time1 = LocalDate.of(2022, 1, 1); LocalDate time2 = LocalDate.of(2022, 1, 9); System.out.println("time1 与 time2 相差:" + Period.between(time1, time2).getDays() + " 天");//相差月数:getMonths();相差年份:getYears()
Date 转LocalDateTime
Instant instant = new Date().toInstant(); ZoneId zoneId = ZoneId.systemDefault(); LocalDate nowDate = instant.atZone(zoneId).toLocalDate(); System.out.println("Date 转LocalDateTime:" + nowDate);
LocalDateTime 转 Date
ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zdt = LocalDate.now().atStartOfDay().atZone(zoneId); System.out.println("LocalDateTime 转 Date :" + Date.from(zdt.toInstant()));