Java Date、Calendar日期时间处理

前言

关于日期和时间的操作,如果使用jdk8以下的jdk可以参考本文,本文涵盖了Calendar的常见操作。

如果你使用的是jdk8或者jdk8以上的版本推荐使用LocalDate、LocalTime、LocalDateTime来处理日期和时间,

可参考我另一篇文章:

java优雅的处理日期时间,LocalDate、LocalTime、LocalDateTime使用

获取当前日期和时间

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Maintest {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String nowTime = format.format(c.getTime());
        System.out.println("今天的日期: " + nowTime);
     }
}

输出:

今天的日期: 2021-07-01 15:04:48

获取年、月、日、时、分、秒、本月最小最大天数

import java.util.Calendar;

public class Maintest {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        //获取年
        int year = c.get(Calendar.YEAR);
        //获取月份,0表示1月份
        int month = c.get(Calendar.MONTH) + 1;
        //获取当前天数
        int day = c.get(Calendar.DAY_OF_MONTH);
        //获取当前小时
        int time = c.get(Calendar.HOUR_OF_DAY);
        //获取当前分钟
        int min = c.get(Calendar.MINUTE);
        //获取当前秒
        int sec = c.get(Calendar.SECOND);
        //星期 (1-7分别代表: 星期日,星期一,星期二,星期三,星期四,星期五,星期六)
        int week = c.get(Calendar.DAY_OF_WEEK);
        //获取本月最小天数
        int first = c.getActualMinimum(Calendar.DAY_OF_MONTH);
        //获取本月最大天数
        int last = c.getActualMaximum(Calendar.DAY_OF_MONTH);

        System.out.println("年: " + year);
        System.out.println("月: " + month);
        System.out.println("日: " + day);
        System.out.println("时: " + time);
        System.out.println("分: " + min);
        System.out.println("秒: " + sec);
        System.out.println("星期: " + week);
        System.out.println("本月最小天数: " + first);
        System.out.println("本月最大天数: " + last);
    }
}

输出:

年: 2021
月: 7
日: 1
时: 15
分: 18
秒: 15
星期: 5
本月最小天数: 1
本月最大天数: 31

字符串与Calendar时间的互换

1.字符串转Calendar时间

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Maintest {
    public static void main(String[] args) {
        try {
            //"2021-06-07 08:07:36"字符串转换为Calendar
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = format.parse("2021-06-07 08:07:36");
            Calendar c = Calendar.getInstance();
            c.setTime(date);

            //测试,获取月份
            int month = c.get(Calendar.MONTH) + 1;
            System.out.println("月: " + month);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

输出:

月: 6

2.Calendar时间字转字符串

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Maintest {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String nowTime = format.format(c.getTime());
        System.out.println("今天的日期: " + nowTime);
    }
}

设置指定的日期时间

除了上面的通过字符串来设置还可以通过:

方法一:

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Maintest {
    public static void main(String[] args) {
        // 设置指定日期,月份需要减一。(比如:如果想设置为6月,则月份需要设为5月)
        Calendar c = Calendar.getInstance();
        c.set(2021, 5, 1,8,6,39);

        //测试,输出
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String nowTime = format.format(c.getTime());
        System.out.println("设置的日期: " + nowTime);
    }
}

输出:

设置的日期: 2021-06-01 08:06:39

方法二:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class Maintest {
    public static void main(String[] args) {
        // 设置指定日期,月份需要减一。(比如:如果想设置为6月,则月份需要设为5月)
        Calendar c = new GregorianCalendar(2016, 5, 1, 5, 41, 22);

        //测试,输出
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String nowTime = format.format(c.getTime());
        System.out.println("设置的日期: " + nowTime);
    }
}

输出:

设置的日期: 2016-06-01 05:41:22

日期时间的加减

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Maintest {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String nowTime = format.format(c.getTime());
        System.out.println("当前时间: " + nowTime);
        
        c.add(Calendar.HOUR_OF_DAY, 1);//增加1小时
        //c.add(Calendar.DAY_OF_MONTH, 1);//增加1天
        //c.add(Calendar.MONTH, 1);//增加1个月
        //c.add(Calendar.YEAR, 1);//增加1年
        //c.add(Calendar.DAY_OF_MONTH, -2);//减少2天
        //c.add(Calendar.YEAR, -2);//减少2年
        nowTime = format.format(c.getTime());
        System.out.println("增加1小时: " + nowTime);
    }
}

输出:

当前时间: 2021-07-01 16:32:12
增加1小时: 2021-06-29 17:32:12

日期时间的比较

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Maintest {
    public static void main(String[] args) {
        Calendar c1 = new GregorianCalendar(2021, 6, 1, 5, 41, 22);
        Calendar c2 = new GregorianCalendar(2021, 6, 2, 5, 41, 22);

        //0则相等,c1早于c2则返回-1,大于则返回1
        int result = c1.compareTo(c2);
        if (result > 0) {
            System.out.println("c1比c2晚");
        } else if(result < 0) {
            System.out.println("c1比c2早");
        }else if(result == 0){
            System.out.println("c1和c2一样");
        }
    }
}

输出:

c1比c2早

计算时间差

1.计算相差几天

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.concurrent.TimeUnit;

public class Maintest {
    public static void main(String[] args) {
        // 注意,月份需要减一。(比如:如果想设置为6月,则月份需要设为5月)
        Calendar c1 = new GregorianCalendar(2021, 5, 1, 5, 41, 22);
        Calendar c2 = new GregorianCalendar(2021, 4, 30, 9, 40, 36);

        Date firstDate = c1.getTime();
        Date secondDate = c2.getTime();
        long diffInMillies = Math.abs(secondDate.getTime() - firstDate.getTime());
        long diff = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);
        System.out.println("相差:" + diff + "天");
    }
}

输出:

相差:1

2.计算相差几分钟

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Maintest {
    public static void main(String[] args) {
        Calendar c1 = new GregorianCalendar(2021, 5, 1, 5, 41, 22);
        Calendar c2 = new GregorianCalendar(2021, 5, 1, 6, 42, 22);

        // 计算毫秒差值
        long startCalendarTimeInMills = c1.getTimeInMillis();
        long endCalendarTimeInMills = c2.getTimeInMillis();
        long differenceInMills = endCalendarTimeInMills - startCalendarTimeInMills;
        // 1秒 = 1000毫秒
        long differenceInSecond = differenceInMills / 1000;
        // 1分钟 = 60秒
        long differenceInMinute = Math.abs(differenceInSecond / 60);
        System.out.println("相差: " + differenceInMinute + " 分钟");
    }
}

输出:

相差: 61 分钟

毫秒与时间格式的转换

1.毫秒转时间:

import java.text.SimpleDateFormat;
import java.util.*;

public class Maintest {
    public static void main(String[] args) {
		long millisecond = 1631203200000L;
        Date date = new Date(millisecond);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("毫秒[1631203200000]对应日期时间字符串:" + format.format(date));
    }
}

输出:

毫秒[1631203200000]对应日期时间字符串:2021-09-10

2.时间转毫秒:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class Maintest {
    public static void main(String[] args) {
        String dateTime = "2021-09-02 12:30:45 123";
        Calendar calendar = Calendar.getInstance();
        try {
            calendar.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").parse(dateTime));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println("日期[2021-09-02 12:30:45 123]对应毫秒:" +calendar.getTimeInMillis());
    }
}

输出:

日期[2021-09-02 12:30:45 123]对应毫秒:1630557045123

关于时间差你还可以参考:
使用 Calendar 计算时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值