Java中的时间和日期类

Date类

date类位于java.util 包中,用于表示特定的时间

image-20230825211809998

    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类

image-20230827162123355

image-20230827162144096

image-20230827162214069

        // 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()));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值