Java中的日期时间类以及格式化使用总结

目录

前言

1. Date类

2. SimpleDateFormat类

3. Calendar​​类

4. LocalDate、LocalTime、LocalDateTime类​

前言

在程序的开发中我们经常会遇到日期类型的操作,Java对日期类型的操作提供了很好的支持,在最初的版本下,​​java.lang​​​包中的​​System.currentTimeMillis(),该方法以毫秒为单位测量,我们通过调用该方法计算某段代码的耗时。

    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        long sum = 0;
        for (int i = 0; i < 500000; i++) {
            sum+=i;
        }
        System.out.println("sum="+sum);
        long endTime = System.currentTimeMillis();
        ///输出:sum=124999750000 耗时:4ms
        System.out.println("耗时:"+(endTime - startTime)+"ms");
}

 1. Date类

 java.util.Date类表示特定的瞬间,精确到毫秒。常见的方法如下

方法定义描述
Date()获取当前日期时间,返回一个代表当前系统时间的Date对象,精确到毫秒
Date(long date)分配一个Date对象并将其初始化,以表示自标准基准时间“epoch”(即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
long getTime()返回这个Date对象从1970年1月1日00:00:00 GMT开始的毫秒数。
void setTime(long time)设置此Date对象以自1970年1月1日00:00:00 GMT之后的时间点,单位为时间毫秒。
boolean before(Date when)判断此日期是否在指定日期之前,是true,否false
boolean after(Date when)判断此日期是否在指定日期之后,是true,否false
boolean equals(Object obj)判断两个日期值是否相等
int compareTo(Date anotherDate)比较两个日期进行排序,如果参数Date等于此Date,则值0;如果此Date在Date参数之前,则值为-1;如果此Date在Date参数之后,则值为1;
String toString()将Date对象转为String格式

2. SimpleDateFormat类

SimpleDateFormat是抽象类DateFormat的实现类,用于以语言环境敏感的方式格式化和解析日期。它允许格式化(日期→文本)、解析(文本→日期)。

Date and Time PatternResult
"yyyy.MM.dd G 'at' HH:mm:ss z"2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy"Wed, Jul 4, '01
"h:mm a"12:08 PM
"hh 'o''clock' a, zzzz"12 o'clock PM, Pacific Daylight Time
"K:mm a, z"0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa"02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z"Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ"010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"2001-07-04T12:08:56.235-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"2001-07-04T12:08:56.235-07:00
"YYYY-'W'ww-u"2001-W27-3

常见方法:
public SimpleDateFormat(String pattern)  
public String format(Date date): 将Date对象格式化为字符串;
public Date parse(String source):将字符串解析为Date对象;

    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        // 输出: 2023-09-14 04:09:33
        System.out.println("使用指定格式的日期字符串: "+sdf.format(new Date()));  //将日期按照指定格式进行格式化
        String str = "2023-09-14 04:08:53";
        Date date = sdf.parse(str);  // 将字符串解析成日期对象
        // 输出: Thu Sep 14 04:08:53 CST 2023
        System.out.println("日期对象: "+date); // Thu Sep 14 16:05:27 CST 2023
}

3. Calendar​​类

4. LocalDate、LocalTime、LocalDateTime类​​

基于Java8之前通常使用Date结合SimpleDateFormat、Calender来处理时间和日期的相关需求,存在明细缺陷,Java8引入java.time包中新增了日期处理相关类。

主要有:             

   LocalDate:表示日期       //年月日
   LocalTime :表示时间      //时分秒
   LocalDateTime:表示时间+ 日期    //年月日时分秒 

 4.1 LocalDate

 public static void main(String[] args) {
        LocalDate now = LocalDate.now(); //获取当前日期
        // 输出:2023-09-14
        System.out.println(now);
        LocalDate now1 = LocalDate.now(ZoneId.of("Asia/Shanghai")); // 获取当前日期(指定时区)
        LocalDate localDate = LocalDate.of(2023, 9, 23); //指定日期
        System.out.println(localDate); //2023-09-23
        int year = LocalDate.now().getYear();  //获取年份
        int monthValue = LocalDate.now().getMonthValue(); //获取月份
        Month month = LocalDate.now().getMonth();  //获取月份的枚举值
        int dayOfMonth = LocalDate.now().getDayOfMonth(); //获取月份中的第几天
        DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); //获取现在是星期几
        int dayOfYear = LocalDate.now().getDayOfYear(); //获取一年中的第几天
        int lengthOfMonth = LocalDate.now().lengthOfMonth(); //获取当月总天数
        int lengthOfYear = LocalDate.now().lengthOfYear();  //获取当年总天数
         // 获取的值依次为: 2023 9 14 257 THURSDAY 365 30
        System.out.println("获取的值依次为: "+year+" "  + monthValue+" "  + dayOfMonth+" "  + dayOfYear +" " + dayOfWeek +" " + lengthOfYear+" "  + lengthOfMonth);
        System.out.println(LocalDate.now()); //2023-09-14
        System.out.println(LocalDate.now().plusDays(1)); //2023-09-15
        System.out.println(LocalDate.now().plusWeeks(1)); //2023-09-21
        System.out.println(LocalDate.now().plusMonths(1)); //2023-10-14
        System.out.println(LocalDate.now().plusYears(1)); //2024-09-14

        System.out.println(LocalDate.now().minusDays(1)); //2023-09-13
        System.out.println(LocalDate.now().minusWeeks(1)); //2023-09-07
        System.out.println(LocalDate.now().minusMonths(1)); //2023-08-14
        System.out.println(LocalDate.now().minusYears(1)); //2022-09-14

       System.out.println(LocalDate.now()); //2023-09-14
        System.out.println(LocalDate.now().withYear(2019)); //2019-09-14
        System.out.println(LocalDate.now().withMonth(6)); //2023-06-14
        System.out.println(LocalDate.now().withDayOfMonth(1)); //2023-09-01
        System.out.println(LocalDate.now().withDayOfYear(1)); //2023-01-01

        LocalDate localDate = LocalDate.of(2023, 7, 21);
        LocalDate now = LocalDate.now();  //2023-09-14
        System.out.println(localDate.isBefore(now)); //是否在某天之前,true
        System.out.println(localDate.isAfter(now)); //是否在某天之后,false
        System.out.println(localDate.isEqual(now)); //是否在当天,false
        System.out.println(localDate.isLeapYear()); //是否是闰年,false
}

4.2 LocalTime

 

4.3 LocalDateTime

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值