日期类(java)

第一代日期类 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:42
        System.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();
        //把年设置成 2004
        calendar.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 -> String
       LocalDateTime localDateTime = LocalDateTime.now();
       DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
       String s = dtf.format(localDateTime);
       System.out.println(s);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值