java日期处理工具类

前言

java8是jdk版本更新里具有里程碑意义的一个版本。它引入了许多新特性。极大简化了我们的开发工作量,是代码变得更简洁。因此,这里我使用的是java8的日期处理类

正文

格式化输出当前时间

LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        System.out.println(formatter.format(now));

结果如下:2019/07/21 13:38:07

指定时间格式为字符串输出

使用老版本的更为灵活

        Object date=new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
        System.out.println(formatter.format(date));

或者

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date=formatter.parse("2020-07-20 17:56:56:01");
        System.out.println(date.toString());
        System.out.println(formatter.format(date));

转换结果如下:
Mon Jul 20 17:56:56 CST 2020
2020-07-20 17:56:56

日期大小的比较

   Date date=new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Object obj="2010-07-20 17:56:56:01";
        Date date1=formatter.parse(String.valueOf(obj));
        if (date.getTime()<date1.getTime()){
           System.out.println("已过期");
        }

日期的加减

 Date date=new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);//设置起时间
        cal.add(Calendar.YEAR, 1);//增加一年

减少一月

Date date=new Date();
        Calendar cl=Calendar.getInstance();
        cl.setTime(date);
        cl.add(Calendar.MONTH,-1);
        Date date1=cl.getTime();

数据库中如果这样存数据。也是可以访问到的
在这里插入图片描述

参考

https://blog.csdn.net/zjc/article/details/78463291
字符转时间
https://blog.csdn.net/u011243684/article/details/81431771
Java 8 新特性:Java 类库的新特性之日期时间API (Date/Time API )
https://blog.csdn.net/sun_promise/article/details/51383618

封装的一个类


package org.dc.commons.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

/**

 * @date 11:38 2019/7/26
 * @description: 时间日期工具类
 */
public class DateUtils {
    //<editor-fold desc="java.time.LocalDateTime">

    //<editor-fold desc="Convert">

    /**
     * 将指定java.util.Date转换为java.time.LocalDateTime类型
     *
     * @param date java.util.Date
     * @return java.time.LocalDateTime
     */
    public static LocalDateTime toLocalDateTime(Date date) {
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
    }

    /**
     * 将指定java.lang.String转换为java.time.LocalDateTime类型
     * <p>
     * 默认格式:yyyy-MM-dd HH:mm:ss
     *
     * @param str java.lang.String
     * @return java.time.LocalDateTime
     */
    public static LocalDateTime toLocalDateTime(String str) {
        return LocalDateTime.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }

    /**
     * 将指定java.lang.String转换为java.time.LocalDateTime类型
     *
     * @param str     java.lang.String
     * @param pattern 日期格式
     * @return java.time.LocalDateTime
     */
    public static LocalDateTime toLocalDateTime(String str, String pattern) {
        return LocalDateTime.parse(str, DateTimeFormatter.ofPattern(pattern));
    }
    //</editor-fold>

    //</editor-fold>

    //<editor-fold desc="java.util.Date">

    //<editor-fold desc="Convert">

    /**
     * 将指定java.time.LocalDateTime转换为java.util.Date类型
     *
     * @param dateTime java.time.LocalDateTime
     * @return java.util.Date
     */
    public static Date toDate(LocalDateTime dateTime) {
        return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 将指定java.lang.String转换为java.util.Date类型
     * <p>
     * 默认格式:yyyy-MM-dd HH:mm:ss
     *
     * @param str java.lang.String
     * @return java.util.Date
     * @throws ParseException 当字符串不能转换为java.time.LocalDateTime时抛出
     */
    public static Date toDate(String str) throws ParseException {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(str);
    }

    /**
     * 将指定java.lang.String转换为java.util.Date类型
     * <p>
     *
     * @param str     java.lang.String
     * @param pattern 日期格式
     * @return java.util.Date
     * @throws ParseException 当字符串不能转换为java.time.LocalDateTime时抛出
     */
    public static Date toDate(String str, String pattern) throws ParseException {
        return new SimpleDateFormat(pattern).parse(str);
    }

    //</editor-fold>

    //<editor-fold desc="time difference">

    /**
     * 比较两个java.util.Date的天数差
     * <p/>注:入参不分大小先后
     *
     * @param firstDate  java.util.Date
     * @param secondDate java.util.Date
     * @return 两个java.util.Date的天数差
     */
    public static int getIntervalDays(Date firstDate, Date secondDate) {
        return (int) (Math.abs(firstDate.getTime() - secondDate.getTime()) / (1000 * 60 * 60 * 24));
    }

    /**
     * 比较两个java.util.Date的小时差
     * <p/>注:入参不分大小先后
     *
     * @param firstDate  java.util.Date
     * @param secondDate java.util.Date
     * @return 两个java.util.Date的小时差
     */
    public static int getIntervalHours(Date firstDate, Date secondDate) {
        return (int) (Math.abs(firstDate.getTime() - secondDate.getTime()) / (1000 * 60 * 60));
    }

    /**
     * 比较两个java.util.Date的分钟差
     * <p/>注:入参不分大小先后
     *
     * @param firstDate  java.util.Date
     * @param secondDate java.util.Date
     * @return 两个java.util.Date的分钟差
     */
    public static int getIntervalMinutes(Date firstDate, Date secondDate) {
        return (int) (Math.abs(firstDate.getTime() - secondDate.getTime()) / (1000 * 60));
    }

    /**
     * 比较两个java.util.Date的秒数差
     * <p/>注:入参不分大小先后
     *
     * @param firstDate  java.util.Date
     * @param secondDate java.util.Date
     * @return 两个java.util.Date的秒数差
     */
    public static int getIntervalSeconds(Date firstDate, Date secondDate) {
        return (int) (Math.abs(firstDate.getTime() - secondDate.getTime()) / 1000);
    }
    //</editor-fold>

    /**
     * 获取指定java.util.Date的开始时间,即时间为:00:00:00
     *
     * @param date java.util.Date
     * @return java.util.Date
     */
    public static Date getDayBegin(Date date) {
        return toDate(toLocalDateTime(date).with(LocalTime.MIN));
    }

    /**
     * 获取指定java.util.Date的结束时间,即时间为:23:59:59
     *
     * @param date java.util.Date
     * @return java.util.Date
     */
    public static Date getDayEnd(Date date) {
        return toDate(toLocalDateTime(date).with(LocalTime.MAX));
    }

    /**
     * 获取指定日期所属季度<p/>
     * 1: 第一季度<p/>
     * 2: 第二季度<p/>
     * 3: 第三季度<p/>
     * 4: 第四季度<p/>
     *
     * @param date java.util.Date
     * @return int
     */
    public static int getQuarter(Date date) {
        int season = -1;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int month = c.get(Calendar.MONTH);
        switch (month) {
            case Calendar.JANUARY:
            case Calendar.FEBRUARY:
            case Calendar.MARCH:
                season = 1;
                break;
            case Calendar.APRIL:
            case Calendar.MAY:
            case Calendar.JUNE:
                season = 2;
                break;
            case Calendar.JULY:
            case Calendar.AUGUST:
            case Calendar.SEPTEMBER:
                season = 3;
                break;
            case Calendar.OCTOBER:
            case Calendar.NOVEMBER:
            case Calendar.DECEMBER:
                season = 4;
                break;
            default:
                break;
        }
        return season;
    }

    //</editor-fold>

    private DateUtils() {
        throw new UnsupportedOperationException("Cannot create [" + DateUtils.class.getName() + "] instance.");
    }
    //<editor-fold desc="Singleton @Deprecated">

//    /**
//     * DateTimeUtils单例
//     *
//     * @return instance
//     */
//    public static DateTimeUtils getInstance() {
//        return InstanceEnum.INSTANCE.getInstance();
//    }
//
//    private DateTimeUtils() { }
//
//    private enum InstanceEnum {
//        INSTANCE;
//
//        private DateTimeUtils instance;
//
//        private DateTimeUtils getInstance() {
//            return this.instance;
//        }
//
//        InstanceEnum() {
//            this.instance = new DateTimeUtils();
//        }
//    }

    //</editor-fold>

    /**
     * by lmj
     * 获得指定时间的前几年,前几月,前几天的时间
     * @param date  起点时间
     * @param diffInt  时间差值
     * @param oneIsYear_twoIsMonth_sixIsDay  1是年的计算,2是月的计算,6是天的计算(传负数是减法,正数是加法)
     * @return
     */
    public static Date getAppointLastDate(Date date,int diffInt,int oneIsYear_twoIsMonth_sixIsDay){
        Calendar calendar=Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(oneIsYear_twoIsMonth_sixIsDay,diffInt);
        return calendar.getTime();
    }

    /**
     * by lmj
     * 默认转时间戳
     * @param date
     * @return
     * @throws ParseException
     */
    public static String toString(Date date){
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
    }
    /**
     * by lmj
     * 日期对象转字符串
     * @param date   日期对象
     * @param pattern 格式化的方式
     *                "yyyy-MM-dd HH:mm:ss"
     * @return
     */
    public static String toString(Date date,String pattern){
        return new SimpleDateFormat(pattern).format(date);
    }

    /**
     * 获取date中的年月日
     */
    public static int getOneYearTwoMonthThreeDay(Date date,int type)throws ParseException{
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int year1 = c.get(Calendar.YEAR);    //获取年
        int month1 = c.get(Calendar.MONTH);
        int day1=c.get(Calendar.DATE);
        if (type==1){
            return year1;
        }else if (type==2){
            return month1+1;
        }else {
            return day1;
        }
    }
    /**
     * 获取本年的开始日期
     */
    public static String getYearStart(Date date)throws ParseException{
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int year1 = c.get(Calendar.YEAR);    //获取年
        return year1+"-01-01 00:00:00";
    }
    /**
     * 获取本年的结束日期
     */
    public static String getYearEnd(Date date)throws ParseException{
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int year1 = c.get(Calendar.YEAR);    //获取年
        return year1+"-12-31 23:59:00";
    }
    /**
     * by lmj
     * 返回离传入时间最近的季度日期
     */
   public static String getQuarterDateString(Date date) throws ParseException {
        int month= DateUtils.getOneYearTwoMonthThreeDay(date,2);
        if (month>0&&month<=3){
            int year=DateUtils.getOneYearTwoMonthThreeDay(date,1)-1;
            return year+"-12-31 00:00:00";
        }else if(month<=6){
            int year=DateUtils.getOneYearTwoMonthThreeDay(date,1);
            return year+"-03-31 00:00:00";
        }else if (month<=9){
            int year=DateUtils.getOneYearTwoMonthThreeDay(date,1);
            return year+"-06-30 00:00:00";
        }else {
            int year = DateUtils.getOneYearTwoMonthThreeDay(date, 1);
            return year + "-09-30 00:00:00";
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.hexiang.utils; import java.text.SimpleDateFormat; import java.util.*; public class CalendarUtil { public static void main(String args[]) { System.out.println("First day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByWeek(new Date()))); System.out.println("Last day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByWeek(new Date()))); System.out.println("First day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByMonth(new Date()))); System.out.println("Last day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByMonth(new Date()))); } /** * 获得所在星期的第一天 */ public static Date getFirstDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 now.set(Calendar.DATE, first_day_of_week); return now.getTime(); } /** * 获得所在星期的最后一天 */ public static Date getLastDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 int last_day_of_week = first_day_of_week + 6; // 星期日 now.set(Calendar.DATE, last_day_of_week); return now.getTime(); } /** * 获得所在月份的最后一天 * @param 当前月份所在的时间 * @return 月份的最后一天 */ public static Date getLastDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.MONTH, now.get(Calendar.MONTH) + 1); now.set(Calendar.DATE, 1); now.set(Calendar.DATE, now.get(Calendar.DATE) - 1); now.set(Calendar.HOUR, 11); now.set(Calendar.MINUTE, 59); now.set(Calendar.SECOND, 59); return now.getTime(); } /** * 获得所在月份的第一天 * @param 当前月份所在的时间 * @return 月份的第一天 */ public static Date getFirstDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.DATE, 0); now.set(Calendar.HOUR, 12); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); return now.getTime(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值