Java Date时间类型的操作实现
作者:P丶少 发布时间:2023-11-25 06:44:31
标签:Java,Date类
本文主要介绍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();
}
}
}
结果
来源:https://blog.csdn.net/qq_28430851/article/details/78144488
0
投稿
猜你喜欢
- 无论哪种界面框架输入文本框都是非常重要的控件, 但是发现flutter中的输入框TextField介绍的虽然多,但是各个属性怎么组合满足需要
- 服务降级服务压力剧增的时候,根据当前的业务情况及流量对一些服务和页面有策略的降级,以此缓解服务器的压力,以保证核心任务的进行。同时保证部分甚
- JPA Specification常用查询+排序1.第一步:继承父类public interface TblCarton2RCardLogR
- 本文实例讲述了Android基于SoftReference缓存图片的方法。分享给大家供大家参考,具体如下:Java中的SoftReferen
- 导入依赖(pom.xml) <!--整合Shiro安全框架--> <dependency>
- 前言假如有人问你这么几个问题,看能不能答上来Mybatis Mapper 接口没有实现类,怎么实现的 * JDK * 为什么不能对类进
- JenkinsJenkins是一个开源的、可扩展的持续集成、交付、部署的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台
- 一、@Configuration注解1、基本使用自定义配置类/** * 1、@Configuration 告诉SpringBoot这是一个配
- Pom依赖<parent> <groupId>org.springframework.bo
- Java泛型映射不同的值类型详解前言:一般来说,开发人员偶尔会遇到这样的情形: 在一个特定容器中映射任意类型的值。然而Java 集合API只
- 准备:wildfly/tomcat或者其他服务器你的数据库的Driver,(此处用的mysql-connecter-java-5.1.39-
- 前言之前我们提到了 CustomPaint er 的 Paint 可以使用渐变(GradientShader)来填充绘制的图形,本篇我们来介
- 一、基本概念(重要)Integer 是 int 的包装类,int 则是 java 的一种基本数据类型;Integer 变量必须实例化后才能使
- ViewDragHelper是support.v4下提供的用于处理拖拽滑动的辅助类,查看Android的DrawerLayout源码,可以发
- 在整合SpringBoot和Mybatis-plus时,想写自定义的sql,所以创建了Mapper.xml文件,但是启动后却老是报错:org
- 今天讲解一下Fragment的控制,主要是切换View和页面替换等操作。还有就是如何获取Fragment的管理对象,以及与Activity的
- 本文实例讲述了Spring实战之SpEl语法。分享给大家供大家参考,具体如下:一 Beanpackage org.crazyit.app.d
- 对于服务器端开发人员而言,调用第三方接口获取数据,将其“代理”转化并返给客户端几乎是家常便
- Java 15 在 2020 年 9 月发布,虽然不是长久支持版本,但是也带来了 14 个新功能,这些新功能中有不少是十分实用的。Java
- 本文我将要介绍一下mybatis的框架原理,以及mybatis的入门程序,实现用户的增删改查,她有什么优缺点以及mybatis和hibern