小记Java时间工具类
小记Java时间工具类
废话不多说,这里主要记录以下几个工具
- 两个时间只差(Data)
- 获取时间的格式 格式化时间 返回String
- 两个时间只差(String)
- 获取两个时间之间的日期、月份、年份
- 获取给定日期之前会之后的日期
- 忽略年月日,仅比较两个时分之间的差 单位分钟
- 获取两个时间的间隔天数(忽略了时分秒) 0 则都是当天的 》1 则是跨天 计算收费专用
- 获取两个时间段内的分段集合 计费专用
- 判断两个时间区间是否有交集
以下是代码块,不足之处还望留言指正,万分感谢。
package com.ftwj.parking.utils; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.commons.lang.StringUtils; public class DateUtils { /**
* 两个时间只差
* @param startDate
* @param endDate
* @return 分钟
*/
public static Integer getBetweenMinutes(Date startDate, Date endDate) {
Integer minutes = 0;
try {
if(startDate!=null&&endDate!=null) {
long ss = 0;
if(startDate.before(endDate)) {
ss = endDate.getTime() - startDate.getTime();
}else {
ss = startDate.getTime() - endDate.getTime();
}
minutes = Integer.valueOf((int) (ss/(60*1000))) ;
}
} catch (Exception e) {
e.printStackTrace();
}
return minutes;
}
/**
* @Title: getDatFormat 获取时间的格式 格式化时间 返回String
* @Description:
* @param: @param date 日期
* @param: @param dateFormat 魔板
* @param: @return
* @throws 包福平
* @return: String
*/
public static String getDatFormat(Date date, String dateFormat) {
try {
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
return format.format(date);
} catch (Exception e) {
e.printStackTrace();
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-DD");
return format.format(new Date());
}
}
/**
* 两个时间只差
* @param startDate
* @param endDate
* @return 分钟
*/
public static Integer getBetweenMinutes(String a, String b) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate;
Date endDate;
try {
startDate = format.parse(a);
endDate = format.parse(b);
try {
long ss = 0;
if(startDate.before(endDate)) {
ss = endDate.getTime() - startDate.getTime();
}else {
ss = startDate.getTime() - endDate.getTime();
}
return Integer.valueOf((int) (ss/(60*1000))) ;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
} catch (ParseException e1) {
e1.printStackTrace();
return 0;
}
} /**
* 获取两个时间之间的日期、月份、年份
* @param beginDate
* @param endDate
* @param type{1:日期,2:月份,其他:年份}
* @return
*/
public static List<String> getBetweenDates(String startDate, String endDate, Integer type) {
SimpleDateFormat format= null;
Date begin = null;
Date end = null;
Integer obj = null;
Integer flag = null;
if(type!=null&&type==1){
format = new SimpleDateFormat("yyyy-MM-dd");
obj = Calendar.DAY_OF_YEAR;
flag = 9;
}else if(type!=null&&type==2){
format = new SimpleDateFormat("yyyy-MM");
obj = Calendar.MONTH;
flag = 11;
}else{
format = new SimpleDateFormat("yyyy");
obj = Calendar.YEAR;
flag = 9;
}
if(StringUtils.isNotEmpty(startDate)&&StringUtils.isNotEmpty(endDate)){
try {
begin = format.parse(startDate);
end = format.parse(endDate);
} catch (ParseException e) {
e.printStackTrace();
}
}else{
end = new Date();
begin = getDateBefore(end,flag,obj);
} List<String> result = new ArrayList<String>();
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(begin);
while (begin.getTime() <= end.getTime()) {
result.add(format.format(tempStart.getTime()));
tempStart.add(obj, 1);
begin = tempStart.getTime();
}
return result;
}
/**
* 获取两个时间之间的日期、月份、年份
* @param date{YYYY-MM-DD-YYYY-MM-DD}
* @param type{1:日期,2:月份,其他:年份}
* @return
*/
public static List<String> getBetweenDates(String date,Integer type) {
SimpleDateFormat format= null;
Date begin = null;
Date end = null;
Integer obj = null;
String startDate = null;
String endDate = null;
Integer flag = null;
if(type!=null&&type==1){
format = new SimpleDateFormat("yyyy-MM-dd");
obj = Calendar.DAY_OF_YEAR;
flag = 9;
}else if(type!=null&&type==2){
format = new SimpleDateFormat("yyyy-MM");
obj = Calendar.MONTH;
flag = 11;
}else{
format = new SimpleDateFormat("yyyy");
obj = Calendar.YEAR;
flag = 9;
}
if(StringUtils.isNotEmpty(date)){
startDate = date.substring(0, 10);
endDate = date.substring(date.length()-10, date.length());
try {
begin = format.parse(startDate);
end = format.parse(endDate);
} catch (ParseException e) {
e.printStackTrace();
}
}else{
end = new Date();
begin = getDateBefore(end,flag,obj);
} List<String> result = new ArrayList<String>();
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(begin);
while (begin.getTime() <= end.getTime()) {
result.add(format.format(tempStart.getTime()));
tempStart.add(obj, 1);
begin = tempStart.getTime();
}
return result;
} public static Date getDateBefore(Date d, int day,Integer type) {
Calendar now = Calendar.getInstance();
now.setTime(d);
now.set(type, now.get(type) - day);
return now.getTime();
} /**
* 获取给定日期之前会之后的日期
* @param date
* @param type
* @param num
* @return
*/
public static String getPreviouslyDate(Date date, String type, Integer num) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String resultDate = "";
Calendar c = Calendar.getInstance();
c.setTime(date);
try {
switch (type) {
case "day":
c.add(Calendar.DATE, num);
break;
case "month":
c.add(Calendar.MONTH, num);
break;
case "year":
c.add(Calendar.YEAR, num);
break;
default:
c.add(Calendar.DATE, 0);
break;
}
Date d = c.getTime();
resultDate = format.format(d);
return resultDate;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} /**
* @Title: 忽略年月日,仅比较两个时分之间的差 单位分钟
* @Description:
* @param: @param a
* @param: @param b
* @param: @return
* @throws 包福平
* @return: Integer
*/
public static Integer changeYMDtoEqual(Date a,Date b) {
if(null==a||null==b) {
return null;
}
String ymd=getDatFormat(new Date(), "yyyy-MM-dd");
String tmpa=ymd+" "+getDatFormat(a, "HH:mm:ss");
String tmpb=ymd+" "+getDatFormat(b, "HH:mm:ss");
return getBetweenMinutes(tmpa, tmpb);
} /**
* @Title: getBetweenDay 获取两个时间的间隔天数(忽略了时分秒) 0 则都是当天的 》1 则是跨天 计算收费专用
* @Description:
* @param: @param startTime
* @param: @param endTime
* @param: @return
* @param: @throws ParseException
* @throws 包福平
* @return: Integer
*/
public static Integer getBetweenDay(Date startDate,Date endDate) throws ParseException {
// SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
//跨年的情况会出现问题哦
//如果时间为:2016-03-18 11:59:59 和 2016-03-19 00:00:01的话差值为 1
Calendar aCalendar = Calendar.getInstance();
aCalendar.setTime(startDate);
int day1 = aCalendar.get(Calendar.DAY_OF_YEAR);
aCalendar.setTime(endDate);
int day2 = aCalendar.get(Calendar.DAY_OF_YEAR);
int days=day2-day1;
return days;
} /**
* @Title: getDayDetailsBetweenDates
* @Description: 获取两个时间段内的分段集合 计费专用
* 例子: String startTime="2019-01-12 7:30:33";
String endTime="2019-01-14 7:30:34";
结果
2019-01-12 07:30:33----2019-01-13 00:00:00
2019-01-13 00:00:00----2019-01-14 00:00:00
2019-01-14 00:00:00----2019-01-14 07:30:34
* @param: @param startDate
* @param: @param endDate
* @param: @return
* @param: @throws ParseException
* @throws 包福平
* @return: List<Map<String,Date>>
*/
public static List<Map<String,Date>> getDayDetailsBetweenDates(Date startDate,Date endDate) throws ParseException{
Integer days=getBetweenDay(startDate, endDate);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<Map<String,Date>> list= new ArrayList<Map<String,Date>>();
for (int i = 0; i <= days; i++) {
System.out.println(i);
Map<String,Date> map = new HashMap<String,Date>();
if(i==0) {
map.put("start", startDate);
}else {
map.put("start", sdf.parse(getPreviouslyDate(startDate, "day", i)+" 00:00:00"));
}
if(i==days) {
map.put("end", endDate);
}else {
map.put("end", sdf.parse(getPreviouslyDate(startDate, "day", i+1)+" 00:00:00"));
}
list.add(map);
}
return list; } /**
* @Title: getIntersectionDate 先进行排序,然后去中间的两个Date 判断此两端分钟数是否相等 不等则取到这个的交集
* @Description: 判断两个时间区间是否有交集 有 则返回交集部分 无则null 网上的一坨屎,自己写吧
* @param: @param bt 开始1
* @param: @param ot 结束1
* @param: @param st 开始2
* @param: @param ed 结束2
* @param: @return
* @throws 包福平
* @return: List<Date>
*/
public static List<Date> getIntersectionDate(Date bt,Date ot,Date st,Date ed) {
try {
//去除直接没有任何交集的部分
if(bt.after(ed)||ot.before(st)) {
return null;
}
List<Date> returnList = new ArrayList<Date>();
List<Date> list = new ArrayList<Date>();
list.add(bt);
list.add(ot);
list.add(st);
list.add(ed);
Collections.sort(list);
if(list.get(1).compareTo(list.get(2))!=0&&(bt.before(ed))) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("包含的开始时间是:" + sdf.format(list.get(1)) + "-结束时间是:" + sdf.format(list.get(2)));
returnList.add(list.get(1));
returnList.add(list.get(2));
}
return returnList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} public static void main(String[] args) throws ParseException{
// String startTime="2019-01-12 7:30:33";
// String endTime="2019-01-14 7:30:34";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Date startDate=sdf.parse(startTime);
// Date endDate=sdf.parse(endTime);
// List<Map<String,Date>> list= getDayDetailsBetweenDates(startDate, endDate);
//
// for (Map<String, Date> map : list) {
// System.out.println(sdf.format(map.get("start"))+"----"+sdf.format(map.get("end")));
// } // // 标准时间
Date startTime = sdf.parse("2019-01-13 00:00:00");//startTime
Date endTime = sdf.parse("2019-01-14 00:00:00");//endTime
// 目标时间
Date start = sdf.parse("2019-01-13 07:30:00");//start
Date end = sdf.parse("2019-01-13 10:00:00");//end
getIntersectionDate(startTime, endTime, start, end); }
}
小记Java时间工具类的更多相关文章
- Java日期工具类,Java时间工具类,Java时间格式化
Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...
- 超详细的Java时间工具类
package com.td.util; import java.sql.Timestamp; import java.text.ParseException; import java.text.Pa ...
- java时间工具类
在项目中,很多地方需要根据时间获取相应的数据,将时间格式化,或者时间比较等相关操作.一个良好的工具类不仅可以减少代码冗余,还能促进业务处理,加快进度. /** * @author: lxw * @Da ...
- 一个好的Java时间工具类DateTime
此类的灵感来源于C# 虽然网上有什么date4j,但是jar太纠结了,先给出源码,可以继承到自己的util包中,作为一个资深程序员,我相信都有不少好的util工具类,我也希望经过此次分享,能带动技术大 ...
- JAVA时间工具类,在维护的项目里的
package com.inspur.jobSchedule.util; import org.apache.commons.lang3.time.DateUtils; import org.apac ...
- Java 时间工具类
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 1.Calendar 转化 String ...
- java时间工具类,时间相互转换
/* * @author XueWeiWei * @date 2019/8/26 16:22 */ package com.nps.utils; import java.text.ParseExcep ...
- JAVA时间工具类用法
1.获得N天前的TIMESTAMP Calendar cl = Calendar.getInstance(); cl.add(Calendar.DAY_OF_YEAR, -7); Date date ...
- 代码片段:基于 JDK 8 time包的时间工具类 TimeUtil
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “知识的工作者必须成为自己时间的首席执行官.” 前言 这次泥瓦匠带来的是一个好玩的基于 JDK ...
随机推荐
- robot framework笔记(一):环境配置(基于python3)+在pycharm中编写及运行robot脚本
(一)使用pip安装robotframework框架和seleniumlibrary库 pip install --upgrade robotframework pip install --upgra ...
- Orchard详解--第九篇 拓展模块及引用的处理
在分析Orchard的模块加载之前,先简要说一下因为Orchard中的模块并不是都被根(启动)项目所引用的,所以当Orchard需要加载一个模块时首先需要保证该模块所依赖的其它程序集能够被找到,那么才 ...
- SQL Server如何查找表名或列名中包含空格的表和列
最近发现一个数据库中的某个表有个字段名后面包含了一个空格,这个空格引起了一些小问题,一般出现这种情况,是因为创建对象时,使用双引号或双括号的时候,由于粗心或手误多了一个空格,如下简单案例所示: USE ...
- 自动化测试的Selenium的python版安装与使用
Selenium是专做网页自动化测试的,即web drive,通过百度Selenium就能找到Selenium的官网 由图可见,selenium支持相当多的编程语言进行网页自动化测试,这里我们使用py ...
- iOS开发创建UI的耗时操作处理
项目中有网络请求.读写操作等一系列耗时操作时,为了避免阻塞主线程,我们会把这些耗时操作放到子线程中去处理,当处理完成后,再回到主线程更新UI,这样就不会阻塞主线程.但是创建UI的时候一般都是在主线程中 ...
- .gho文件检查
虽然目前windows10的接受程度越来越广泛,但我接触到的一些非IT人士还是钟爱于windows7系统,本文记录一下在使用ghost还原系统遇到的问题. gho还原失败 在还原ghost系统过程中, ...
- no plugin found for prefix 'tomcat 7' in the current project and in the plugin groups的解决方法
解决方法一: 找到这个settings.xml文件,进行编辑,在pluginGroups标签下加入下面的配置 <pluginGroups><pluginGroup>org.ap ...
- Spring 的application.properties项目配置与注解
一.项目结构介绍 如上图所示,Spring Boot的基础结构共三个文件: src/main/java 程序开发以及主程序入口 src/main/resources 配置文件 src/test/ja ...
- TLB的作用及工作过程
下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 页表一般都非常大,而且存放在内存中,所以处理器引入MMU后,读取指令.数据须要訪问两次内存:首先通过查询页表得到物 ...
- NGINX+PHP+ZABBIX,推荐
https://www.cnblogs.com/liuzhennan/articles/5319280.html