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


猜你喜欢
- 启动第二个服务时就会报如下的错误:Server failed to start for port 8080: Address already
- ??是一个二元运算符,如果左操作数非空,则返回左操作数,否则返回右操作数,所以,在一些特定的场合可以用它来代替?:运算符,简化代码书写。例1
- 为什么需要Spring MVC最开始接触网页的时候,是纯的html/css页面,那个时候还是用Dreamweaver来绘制页面。随着网站开发
- 前言《接月饼小游戏》是一个基于java的自制游戏,不要被月亮砸到,尽可能地多接月饼。此小项目可用来巩固JAVA基础语法,swing的技巧用法
- XSS是一种经常出现在web应用中的计算机安全漏洞,具体信息请自行Google。本文只分享在Spring Cloud Gateway中执行通
- 方法重写与之前的方法重载不同回顾一下方法重载,相同的方法名不同参数类型和参数数量以及参数顺序package Demo1;import jav
- android开发中有时候碰到切换语言的需求,这时候需要通过代码动态改变当前运行语言。package com.example.android
- 作者: juky_huang 事件的简单解释: 事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如
- 前言哎呀,妈呀,又出异常了!俗话说:“代码虐我千百遍,我待代码如初恋”。小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了
- 如果需要在布局中创造一个层叠的概念,那么使用Android系统中的ViewGroup是不够的,但是可以通过改变ViewGroup的绘制顺序实
- Collections工具类Java里关于聚合的工具类,包含有各种有关集合操作的静态多态方法,不能实例化(把构造函数私有化)public c
- mybatis多个区间处理如图:要实现车辆数不同区间查询条件思路a.前端传数组,数组里面放"1-5"String类型值
- Android 的导航栏有诸多功能,例入 截屏,音量加,音量减,最近任务,菜单.返回,主页面,输入法开关......代码源路径:
- C语言求三次方根前话说到C语言求根,我们一般会想到用sqrt(x)函数,它的输入值和返回值都是double型,x取整将会导致编译器错误。但是
- 本文实例为大家分享了C#多线程Thread使用的示例代码,供大家参考,具体内容如下多线程:线程生命周期状态图:C#线程优先级(概率高低):基
- 在java中类之间也是有着继承关系的,就我们之前有提到不少父类与子类的一些问题。 讲的以子类的调用为主,那么有小伙伴知道父类的调用方法吗?这
- 前言之前我们说10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#),过程有些许繁
- 本文实例为大家分享了Android手机开发设计之记事本功能,供大家参考,具体内容如下一、需求分析1.1业务需求分析近年来,随着生活节奏的加快
- init和clinit区别①init和clinit方法执行时机不同init是对象构造器方法,也就是说在程序执行 new 一个对象调用该对象类
- 1、什么是ThreadLocal变量ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thr