Java Date时间类型的操作实现

 更新时间:2022年04月06日 16:22:25   作者:P丶少  
本文主要介绍Java Date 日期类型,以及Calendar的怎么获取时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

本文主要介绍Java Date 日期类型,以及Calendar的怎么获取时间,然后写成时间工具类里面有下面这些方法:

  • - 时间转字符串(有默认时间格式,带时间格式)
  • - 字符串转时间(有默认时间格式,带时间格式)
  • - 计算两个日期之间相差的天数
  • - 计算当前时间多少天以后的日期
  • - 判断是否是日期格式

代码

很多说明都注释在代码上:

package datedemo;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Pattern;
/**
 * 日期工具
 */
public class DateUtil {
    private final static String A="yyyy-MM-dd";//日期格式
    private final static String B="yyyy-MM-dd HH:mm:ss";//日期格式
    private final static String C="yyyy/MM/dd HH:mm:ss";//日期格式
    private final static String exp="((^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(10|12|0?[13578])([-\\/\\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(11|0?[469])([-\\/\\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(0?2)([-\\/\\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([3579][26]00)([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][0][48])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][0][48])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][2468][048])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][2468][048])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][13579][26])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][13579][26])([-\\/\\._])(0?2)([-\\/\\._])(29)$))";
    /**
     * 时间类型转字符串 固定返回 日期为 yyyy-MM-dd
     * @param date
     * @return String
     */
    public static String getDateToString(Date date) throws Exception{
        String s;
        SimpleDateFormat sft=new SimpleDateFormat(A);//格式时间对象
        s=sft.format(date);
        return s;
    }

    /**
     * 时间类型转字符串 不固定日期格式
     * @param date
     * @param format
     * @return String
     */
    public static String getDteToString (Date date,String format) throws Exception{
        String s;
        SimpleDateFormat sft=new SimpleDateFormat(format);//格式时间对象
        s=sft.format(date);
        return s;
    }

    /**
     * 字符串时间转时间类型 固定日期格式 yyyy-MM-dd
     * @param text 字符串时间
     * @return Date
     * @throws Exception
     */
    public static Date getStringToDate(String text) throws Exception{
        SimpleDateFormat sdf = new SimpleDateFormat(A);//格式时间对象
        Date date = sdf.parse(text);
        return date;
    }

    /**
     * 字符串时间转时间类型 不固定时间格式
     * @param text 时间字符串
     * @param format 日期格式
     * @return Date
     * @throws Exception
     */
    public static Date gettringToDate(String text,String format) throws Exception{
        SimpleDateFormat sdf=new SimpleDateFormat(format);//格式时间对象
        Date date=sdf.parse(text);
        return date;
    }

    /**
     *计算两个日期之间相差的天数
     * @param a 第一个日期时间
     * @param b 第二个日期时间
     * @return
     * @throws Exception
     */
    public static long getDaysBetweenTwoDates(Date a, Date b) throws Exception {
        //判断这两个时间的大小
        if(a.equals(b)) return 0;
        if(!a.before(b)){//保证返回的值为正数
            Date temp;
            temp=a;
            a=b;
            b=temp;
        }
        Calendar c = Calendar.getInstance();//获取calendar对像
        c.setTime(a);//设置时间 date  转 calendar 类型
        long t1 = c.getTimeInMillis();//获取时间戳
        c.setTime(b);
        long t2 = c.getTimeInMillis();
        //计算天数
        long days = (t2 - t1) / (24 * 60 * 60 * 1000);
        return days;
    }

    /**
     * 计算当前时间多少天以后的日期
     * @param currentDate 当前时间
     * @param distance 距离多少天
     * @return
     */
    public static Date getNextDasByNumber(Date currentDate,int distance)throws Exception{
        Calendar calendar=Calendar.getInstance();//获取日历对象
        calendar.setTime(currentDate);//设置当前时间 date  转 calendar 类型
        calendar.add(Calendar.DATE,distance);//计算离当前时间以后的日期
        Date date=calendar.getTime();//calendar 转 date  类型
        return date;
    }

    /**
     * 判断是否是日期格式
     * @param date  字符串
     * @return
     */
    public static boolean isDate(String date){
       // 创建 Pattern 对象 java正则表达式对象
        Pattern r = Pattern.compile(exp);
        boolean flag =  r.matcher(date).matches();//判断它格式是否正确
        return flag;
    }

    public static void main(String []arg){
        Calendar calendar=Calendar.getInstance();
        try {
            //验证计算两个日期之间相差的天数
            long i= getDaysBetweenTwoDates(getStringToDate("2017-02-11"),getStringToDate("2017-03-11"));
            System.out.println("计算(2017-02-11,2017-03-11)两个日期之间相差的天数:"+i);

            Date d= getNextDasByNumber(getStringToDate("2017-02-11"),28);
            System.out.println("计算(2017-02-11)时间128天以后的日期:"+getDateToString(d));
            boolean f= isDate("2017-02-11");
            System.out.println("判断2017-02-11日期格式是否正确:"+f);
            boolean f1= isDate("20170211");//正则表达式不支持这种
            System.out.println("判断20170211日期格式是否正确:"+f1);
            boolean f2= isDate("2017/02/11");
            System.out.println("判断2017/02/11日期格式是否正确:"+f2);
            System.out.println();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

结果

总结

Calendar比Java原有的Date更加强大些,它们之间也可以相互转换 ,不过用Calendar,小心获取月份时,它是阴历–得加一才是我们正常的月份;
就说这么多了,都是干货哈!!!,大家有不明白的或者有新的需求都可提出来,一起讨论讨论;

到此这篇关于Java Date时间类型的操作实现的文章就介绍到这了,更多相关Java Date类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 自定义类加载器的父类为何是AppClassLoader说明

    自定义类加载器的父类为何是AppClassLoader说明

    这篇文章主要介绍了自定义类加载器的父类为何是AppClassLoader说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 基于logback 实现springboot超级详细的日志配置

    基于logback 实现springboot超级详细的日志配置

    java web 下有好几种日志框架,比如:logback,log4j,log4j2(slj4f 并不是一种日志框架,它相当于定义了规范,实现了这个规范的日志框架就能够用 slj4f 调用)。这篇文章主要介绍了基于logback springboot超级详细的日志配置,需要的朋友可以参考下
    2019-06-06
  • Java包装类之自动装箱与拆箱

    Java包装类之自动装箱与拆箱

    这篇文章主要介绍了Java包装类之自动装箱与拆箱,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 关于SpringSecurity的基本使用示例

    关于SpringSecurity的基本使用示例

    这篇文章主要介绍了关于SpringSecurity的基本使用示例,SpringSecurity 本质是一个过滤器链SpringSecurity 采用的是责任链的设计模式,它有一条很长的过滤器链,需要的朋友可以参考下
    2023-05-05
  • SpringBoot整合MybatisPlus的简单教程实现(简单整合)

    SpringBoot整合MybatisPlus的简单教程实现(简单整合)

    这篇文章主要介绍了SpringBoot整合MybatisPlus的简单教程实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • 解决使用RestTemplate时报错RestClientException的问题

    解决使用RestTemplate时报错RestClientException的问题

    这篇文章主要介绍了解决使用RestTemplate时报错RestClientException的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • SpringBoot如何配置MySQL和Oracl双数据源(Mybatis)

    SpringBoot如何配置MySQL和Oracl双数据源(Mybatis)

    这篇文章主要介绍了SpringBoot如何配置MySQL和Oracl双数据源(Mybatis)问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 详解SpringBoot构建的Web项目如何在服务端校验表单输入

    详解SpringBoot构建的Web项目如何在服务端校验表单输入

    这篇文章主要介绍了详解SpringBoot构建的Web项目如何在服务端校验表单输入,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • ssm整合之Spring整合MyBatis框架配置事务的详细教程

    ssm整合之Spring整合MyBatis框架配置事务的详细教程

    这篇文章主要介绍了ssm整合之Spring整合MyBatis框架配置事务,本文通过图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 详解JAVA中获取文件MD5值的四种方法

    详解JAVA中获取文件MD5值的四种方法

    这篇文章主要介绍了JAVA中获取文件MD5值的四种方法,获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过MessageDigest类进行MD5加密,第三步转换成16进制的MD5码值,需要的朋友可以参考下
    2022-08-08

最新评论