java日期操作工具类(获取指定日期、日期转换、相隔天数)
作者:司凯子 发布时间:2023-11-28 06:42:53
标签:java,日期,工具类
本文实例为大家分享了java日期操作工具类,获取指定日期前一天、后一天;日期转换;两个日期之间相隔天数等工具类,供大家参考,具体内容如下
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class DateUtil {
/**
* 获得指定日期的前一天
*
* @param specifiedDay
* @param format
* @return
* @throws Exception
*/
public static Date getDayBefore(Date date, String format) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day - 1);
String dayBeforeStr = new SimpleDateFormat(format).format(c.getTime());
Date dayBefore = null;
try {
dayBefore = new SimpleDateFormat(format).parse(dayBeforeStr);
} catch (ParseException e) {
e.printStackTrace();
}
return dayBefore;
}
/**
* 获得指定日期的后一天
*
* @param specifiedDay
* @return
*/
public static Date getDayAfter(Date date, String format) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + 1);
String dayAfterStr = new SimpleDateFormat(format).format(c.getTime());
Date dayAfter = null;
try {
dayAfter = new SimpleDateFormat(format).parse(dayAfterStr);
} catch (ParseException e) {
e.printStackTrace();
}
return dayAfter;
}
/**
* 获得指定日期的前一天
*
* @param specifiedDay
* @param format
* @return
* @throws Exception
*/
public static String getSpecifiedDayBefore(String specifiedDay, String format) {
// SimpleDateFormat simpleDateFormat = new
// SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date date = null;
try {
date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
}
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day - 1);
String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
return dayBefore;
}
/**
* 获得指定日期的后一天
*
* @param specifiedDay
* @return
*/
public static String getSpecifiedDayAfter(String specifiedDay, String format) {
Calendar c = Calendar.getInstance();
Date date = null;
try {
// date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
date = new SimpleDateFormat(format).parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
}
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + 1);
// String dayAfter=new
// SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
String dayAfter = new SimpleDateFormat(format).format(c.getTime());
return dayAfter;
}
/**
* 将date类型准成指定format格式的字符串
*
* @param day 日期
* @param format 指定格式
* @return
*/
public static String date2String(Date day, String format) {
String dateStr = new SimpleDateFormat(format).format(day.getTime());
return dateStr;
}
/**
* 将字符串转成指定格式的date类型
*
* @param day 日期
* @param format 指定格式
* @return
*/
public static Date string2Date(String dateStr,String format) {
Date strDate = null;
try {
strDate = new SimpleDateFormat(format).parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return strDate;
}
/**
*
* @Title: DateDate2CompareValue
* @Description: 两个date类型比较大小
* @param dayAfter date类型
* @param date date类型
* @param 格式化
* @return boolean
* @throws
*/
public static boolean DateDate2CompareValue(Date dayAfter, Date date, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
Date d1 = sdf.parse(sdf.format(dayAfter));
Date d2 = sdf.parse(sdf.format(date));
if(d1.getTime()>=d2.getTime()){
return true;
}
} catch (ParseException e) {
e.printStackTrace();
}
return false;
}
/**
* 比较两个日期年月日的大小
* @Title: DateCompareValue
* @Description: 一个stirng一个date类型比较大小
* @param date1 String类型
* @param date2 date类型
* @param @return
* @return boolean
* @throws
*/
public static boolean DateStrDateCompareValue(String date1, Date date, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
Date d1 = sdf.parse(date1);
Date d2 = sdf.parse(sdf.format(date));
if(d1.getTime()>=d2.getTime()){
return true;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
/**
* 比较两个日期年月日的大小
* @Title: DateStr2CompareValue
* @Description: 两个string类型比较时间大小
* @param date1
* @param date2
* @return boolean
* @throws
*/
@SuppressWarnings("unused")
public static boolean DateStr2CompareValue(String date1, String date2,String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
Date d1 = sdf.parse(date1);
Date d2 = sdf.parse(date2);
if(d1.getTime()>=d2.getTime()){
return true;
}
} catch (ParseException e) {
e.printStackTrace();
}
return false;
}
/**
*
* @Title: get2DateListDate
* @date 2016年5月17日 下午2:11:48
* @Description: 获取时间之内的 相隔天数的date集合
* @param @param preDate 开始时间
* @param @param nextDate 结束时间
* @param @param format fomat格式
* @param @return
* @return List<Date> 相隔天数集合
* @throws
*/
public static List<Date> get2DateListDate(String preDate, String nextDate, String format) {
List<Date> list = new ArrayList<>();
if(nextDate.equals(preDate)){//开始时间 结束时间相等就直接返回
list.add(DateUtil.string2Date(preDate, format));
return list;
}
String nexDate = DateUtil.getSpecifiedDayAfter(preDate, format);
list.add(DateUtil.string2Date(preDate, format));
list.add(DateUtil.string2Date(nexDate, format));
while (!nexDate.equals(nextDate)) {
String nextnextDate = DateUtil.getSpecifiedDayAfter(nexDate, format);
list.add(DateUtil.string2Date(nextnextDate, format));
nexDate = nextnextDate;
}
return list;
}
/**
*
* @Title: get2DateListDate
* @date 2016年5月17日 下午2:11:48
* @Description: 获取时间之内的 相隔天数的string集合
* @param @param preDate 开始时间
* @param @param nextDate 结束时间
* @param @param format fomat格式
* @param @return
* @return List<Date> 相隔天数集合
* @throws
*/
public static List<String> get2DateListDateStr(String preDate, String nextDate, String format) {
List<String> list = new ArrayList<>();
if(nextDate.equals(preDate)){//如果开始时间等于结束时间那么就是同一天
list.add(preDate);
return list;
}
String nexDate = DateUtil.getSpecifiedDayAfter(preDate, format);
list.add(preDate);
list.add(nexDate);
while (!nexDate.equals(nextDate)) {
String nextnextDate = DateUtil.getSpecifiedDayAfter(nexDate, format);
list.add(nextnextDate);
nexDate = nextnextDate;
}
return list;
}
/**
*
* @Title: get2DateListWithDate
* @date 2016年5月26日 上午9:20:29
* @Description: 获取两个日期之间日期的
* @param @param startDate 开始日期 date类型
* @param @param endDate 结束日期 date类型
* @param @return
* @return List<Date> datelist
* @throws
*/
public static List<Date> get2DateListWithDate(Date startDate, Date endDate,String format) {
List<Date> list = new ArrayList<>();
if(startDate.getTime() >endDate.getTime()){
return list;
}
String startDateStr = DateUtil.date2String(startDate, format);
String endDateStr = DateUtil.date2String(endDate, format);
if(startDateStr.equals(endDateStr)){//如果开始时间等于结束时间那么就是同一天
list.add(startDate);
return list;
}
Date nextDate = DateUtil.getDayAfter(startDate, format);
String nextDateStr = DateUtil.date2String(nextDate, format);
//String endDateStr = DateUtil.date2String(endDate, format);
list.add(startDate);
list.add(nextDate);
while (!nextDateStr.equals(endDateStr)) {
String nextnextDate = DateUtil.getSpecifiedDayAfter(nextDateStr, format);
list.add(DateUtil.string2Date(nextnextDate, format));
nextDateStr = nextnextDate;
}
return list;
}
public static void main(String[] args) throws Exception {
/**/ String preDate = getSpecifiedDayBefore("2016-05-01", "yyyy-MM-dd");
String nextDate = getSpecifiedDayAfter("2016-05-03", "yyyy-MM-dd");
Date befroDay = getDayBefore(new Date(), "yyyy-MM-dd");
Date dateAfter = getDayAfter(new Date(), "yyyy-MM-dd");
// System.out.println("前一天:" + preDate + " 后一天:" + nextDate);
// System.err.println("前一天:" +date2String( befroDay ,"yyyy-MM-dd")+ "
// 后一天:" + dateAfter);
String mat = "yyyy-MM-dd";// 这里最好从数据库中读取
SimpleDateFormat dateTimeFormat = new SimpleDateFormat(mat);
Date dd = DateUtil.getDayBefore(new Date(), mat);
// Date befroDay = getDayBefore(new Date(), "yyyy-MM-dd");
String sd = date2String(befroDay, "yyyy-MM-dd");
String dateStr = dateTimeFormat.format(befroDay);
// System.out.println("dateStr="+dateStr+" sd "+sd);
//List<Date> listDate = get2DateListDate("2016-05-01", "2016-05-03", "yyyy-MM-dd");
//List<String> listDateStr = get2DateListDateStr("2016-05-01", "2016-05-03", "yyyy-MM-dd");
Date startDate = new Date();
Date endDate = dateTimeFormat.parse("2016-05-31");
List<Date> listDate = get2DateListWithDate(startDate,endDate,"yyyy-MM-dd");
for (int i = 0; i < listDate.size(); i++) {
System.err.println(listDate.get(i));
}
/*for (int i = 0; i < listDateStr.size(); i++) {
//System.out.println(listDateStr.get(i));
}*/
}


猜你喜欢
- 前言一直用C#开发程序,.NET的功能越来越多,变化也挺大的,从最初的封闭,到现在的开源,功能不断的增加,一直在进步。下面就来给大家详细介绍
- 本猿今天今天帮公司写第三支付接口的时候,灵机一动就想写一个扩展性比较的强的充值接口,t通过选择不同的充值渠道,调用不同的充值实现类(好了,废
- OPC Server服务器服务器的开发比较繁琐,本示例采用C#提供了一种简单快速实现OPCServer的方法,已经在工程项目中应用,希望对大
- 近日于LeetCode看题遇1114 按序打印,获悉一解法使用了Semaphore,顺势研究,记心得于此。此解视Semaphore为锁,以保
- 1.写个Mybatis-plus配置类:是通过 * 实现分页@Configurationpublic class MybatisConfig
- C#中属性的目的是对字段的封装,是为了程序数据的安全性考虑的。本文即以实例形式对C#中只读只写属性进行剖析。对于只读或只写的属性定义:1、不
- 1、获取db实例SQLiteDatabase db=dbhelper.getWritableDatabase();2、Cursord对象获取
- Qt窗体中默认会附加一个QstatusBar组件,状态栏组件位于主窗体的最下方,其作用是提供一个工具提示功能,当程序中有提示信息是可以动态的
- 本文实例讲述了Android实现调用震动的方法。分享给大家供大家参考,具体如下:调用Android系统的震动,只需要一个类 那就是Vibra
- 启用URL参数在解决方案资源管理器中右键点击你的ClickOnce工程,点击属性进入发布选项卡,点击“选项”按钮,在弹出的界面中选中“允许给
- for循环语句重复执行语句,直到条件变为 false。语法for ( init-expression ; cond-expression ;
- 项目需要从其他网站获取数据,因为是临时加的需求,在开始项目时没想到需要多数据源于是百度了一下,发现只需要改动一下Spring 的applic
- 前言:事情是这样的:运营人员反馈,通过Excel导入数据时,有一部分成功了,有一部分未导入。初步猜测,是事务未生效导致的。查看代码,发现导入
- 本文实例讲述了Java使用备忘录模式实现过关类游戏功能。分享给大家供大家参考,具体如下:一.模式定义备忘录模式,在不破坏封闭的前提下,捕获一
- 前言最近项目中需要用到字符串加解密,遂研究了一波,发现密码学真的是博大精深,好多算法的设计都相当巧妙,学到了不少东西,在这里做个小小的总结,
- 依赖的jar包:spring相关jar包版本:4.3.1.RELEASE<dependency> &l
- 主题Theme就是用来设置界面UI风格,可以设置整个应用或者某个活动Activity的界面风格。在Android SDK中内置了下面的The
- 本文实例讲述了Java线程之守护线程(Daemon)用法。分享给大家供大家参考。具体如下:守护线程(Daemon)Java有两种Thread
- Java中如何输出像1-2-3-4-5 这样的字符抱歉对于这个问题我甚至不能想到一个合适的标题,但是不重要 以下操作基于 jdk 1.8St
- 最近发现线上监控有个SQL调用量很大,但是方法的调用量不是很大,查看接口实现,发现接口是做了缓存操作的,使用Spring cache缓存注解