Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
warehouse
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
胡懿
warehouse
Commits
9fc9f284
Commit
9fc9f284
authored
Feb 13, 2023
by
zhanglt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
date工具类
parent
59244dad
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
843 additions
and
0 deletions
+843
-0
DateUtil.java
src/main/java/com/jeeplus/common/utils/DateUtil.java
+843
-0
No files found.
src/main/java/com/jeeplus/common/utils/DateUtil.java
0 → 100644
View file @
9fc9f284
package
com
.
jeeplus
.
common
.
utils
;
import
java.sql.Timestamp
;
import
java.text.DateFormat
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.time.LocalDate
;
import
java.util.*
;
/**
* @program: jeeplus
* @description: 时间工具类
* @author: wx154202866@163.com
* @create: 2020-04-01 21:27
**/
public
class
DateUtil
{
// ==格式到年==
/**
* 日期格式,年份,例如:2004,2008
*/
public
static
final
String
DATE_FORMAT_YYYY
=
"yyyy"
;
// ==格式到年月 ==
/**
* 日期格式,年份和月份,例如:200707,200808
*/
public
static
final
String
DATE_FORMAT_YYYYMM
=
"yyyyMM"
;
/**
* 日期格式,年份和月份,例如:200707,2008-08
*/
public
static
final
String
DATE_FORMAT_YYYY_MM
=
"yyyy-MM"
;
// ==格式到年月日==
/**
* 日期格式,年月日,例如:050630,080808
*/
public
static
final
String
DATE_FORMAT_YYMMDD
=
"yyMMdd"
;
/**
* 日期格式,年月日,用横杠分开,例如:06-12-25,08-08-08
*/
public
static
final
String
DATE_FORMAT_YY_MM_DD
=
"yy-MM-dd"
;
/**
* 日期格式,年月日,例如:20050630,20080808
*/
public
static
final
String
DATE_FORMAT_YYYYMMDD
=
"yyyyMMdd"
;
/**
* 日期格式,年月日,用横杠分开,例如:2006-12-25,2008-08-08
*/
public
static
final
String
DATE_FORMAT_YYYY_MM_DD
=
"yyyy-MM-dd"
;
/**
* 日期格式,年月日,例如:2016.10.05
*/
public
static
final
String
DATE_FORMAT_POINTYYYYMMDD
=
"yyyy.MM.dd"
;
/**
* 日期格式,年月日,例如:2016年10月05日
*/
public
static
final
String
DATE_TIME_FORMAT_YYYY
年
MM
月
DD
日
=
"yyyy年MM月dd日"
;
// ==格式到年月日 时分 ==
/**
* 日期格式,年月日时分,例如:200506301210,200808081210
*/
public
static
final
String
DATE_FORMAT_YYYYMMDDHHmm
=
"yyyyMMddHHmm"
;
/**
* 日期格式,年月日时分,例如:20001230 12:00,20080808 20:08
*/
public
static
final
String
DATE_TIME_FORMAT_YYYYMMDD_HH_MI
=
"yyyyMMdd HH:mm"
;
/**
* 日期格式,年月日时分,例如:2000-12-30 12:00,2008-08-08 20:08
*/
public
static
final
String
DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI
=
"yyyy-MM-dd HH:mm"
;
// ==格式到年月日 时分秒==
/**
* 日期格式,年月日时分秒,例如:20001230120000,20080808200808
*/
public
static
final
String
DATE_TIME_FORMAT_YYYYMMDDHHMISS
=
"yyyyMMddHHmmss"
;
/**
* 日期格式,年月日时分秒,年月日用横杠分开,时分秒用冒号分开
* 例如:2005-05-10 23:20:00,2008-08-08 20:08:08
*/
public
static
final
String
DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS
=
"yyyy-MM-dd HH:mm:ss"
;
// ==格式到年月日 时分秒 毫秒==
/**
* 日期格式,年月日时分秒毫秒,例如:20001230120000123,20080808200808456
*/
public
static
final
String
DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS
=
"yyyyMMddHHmmssSSS"
;
// ==特殊格式==
/**
* 日期格式,月日时分,例如:10-05 12:00
*/
public
static
final
String
DATE_FORMAT_MMDDHHMI
=
"MM-dd HH:mm"
;
/* ************工具方法*************** */
/**
* 获取某日期的年份
* @param date
* @return
*/
public
static
Integer
getYear
(
Date
date
)
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
return
cal
.
get
(
Calendar
.
YEAR
);
}
/**
* 获取某日期的月份
* @param date
* @return
*/
public
static
Integer
getMonth
(
Date
date
)
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
return
cal
.
get
(
Calendar
.
MONTH
)
+
1
;
}
/**
* 获取某日期的日数
* @param date
* @return
*/
public
static
Integer
getDay
(
Date
date
){
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
int
day
=
cal
.
get
(
Calendar
.
DATE
);
//获取日
return
day
;
}
/**
* 格式化Date时间
* @param time Date类型时间
* @param timeFromat String类型格式
* @return 格式化后的字符串
*/
public
static
String
parseDateToStr
(
Date
time
,
String
timeFromat
){
DateFormat
dateFormat
=
new
SimpleDateFormat
(
timeFromat
);
return
dateFormat
.
format
(
time
);
}
/**
* 格式化Timestamp时间
* @param timestamp Timestamp类型时间
* @param timeFromat
* @return 格式化后的字符串
*/
public
static
String
parseTimestampToStr
(
Timestamp
timestamp
,
String
timeFromat
){
SimpleDateFormat
df
=
new
SimpleDateFormat
(
timeFromat
);
return
df
.
format
(
timestamp
);
}
/**
* 格式化Date时间
* @param time Date类型时间
* @param timeFromat String类型格式
* @param defaultValue 默认值为当前时间Date
* @return 格式化后的字符串
*/
public
static
String
parseDateToStr
(
Date
time
,
String
timeFromat
,
final
Date
defaultValue
){
try
{
DateFormat
dateFormat
=
new
SimpleDateFormat
(
timeFromat
);
return
dateFormat
.
format
(
time
);
}
catch
(
Exception
e
){
if
(
defaultValue
!=
null
)
return
parseDateToStr
(
defaultValue
,
timeFromat
);
else
return
parseDateToStr
(
new
Date
(),
timeFromat
);
}
}
/**
* 格式化Date时间
* @param time Date类型时间
* @param timeFromat String类型格式
* @param defaultValue 默认时间值String类型
* @return 格式化后的字符串
*/
public
static
String
parseDateToStr
(
Date
time
,
String
timeFromat
,
final
String
defaultValue
){
try
{
DateFormat
dateFormat
=
new
SimpleDateFormat
(
timeFromat
);
return
dateFormat
.
format
(
time
);
}
catch
(
Exception
e
){
return
defaultValue
;
}
}
/**
* 格式化String时间
* @param time String类型时间
* @param timeFromat String类型格式
* @return 格式化后的Date日期
*/
public
static
Date
parseStrToDate
(
String
time
,
String
timeFromat
)
{
if
(
time
==
null
||
time
.
equals
(
""
))
{
return
null
;
}
Date
date
=
null
;
try
{
DateFormat
dateFormat
=
new
SimpleDateFormat
(
timeFromat
);
date
=
dateFormat
.
parse
(
time
);
}
catch
(
Exception
e
){
}
return
date
;
}
/**
* 格式化String时间
* @param strTime String类型时间
* @param timeFromat String类型格式
* @param defaultValue 异常时返回的默认值
* @return
*/
public
static
Date
parseStrToDate
(
String
strTime
,
String
timeFromat
,
Date
defaultValue
)
{
try
{
DateFormat
dateFormat
=
new
SimpleDateFormat
(
timeFromat
);
return
dateFormat
.
parse
(
strTime
);
}
catch
(
Exception
e
)
{
return
defaultValue
;
}
}
/**
* 当strTime为2008-9时返回为2008-9-1 00:00格式日期时间,无法转换返回null.
* @param strTime
* @return
*/
public
static
Date
strToDate
(
String
strTime
)
{
if
(
strTime
==
null
||
strTime
.
trim
().
length
()<=
0
)
return
null
;
Date
date
=
null
;
List
<
String
>
list
=
new
ArrayList
<
String
>(
0
);
list
.
add
(
DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS
);
list
.
add
(
DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS
);
list
.
add
(
DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI
);
list
.
add
(
DATE_TIME_FORMAT_YYYYMMDD_HH_MI
);
list
.
add
(
DATE_TIME_FORMAT_YYYYMMDDHHMISS
);
list
.
add
(
DATE_FORMAT_YYYY_MM_DD
);
//list.add(DATE_FORMAT_YY_MM_DD);
list
.
add
(
DATE_FORMAT_YYYYMMDD
);
list
.
add
(
DATE_FORMAT_YYYY_MM
);
list
.
add
(
DATE_FORMAT_YYYYMM
);
list
.
add
(
DATE_FORMAT_YYYY
);
for
(
Iterator
iter
=
list
.
iterator
();
iter
.
hasNext
();)
{
String
format
=
(
String
)
iter
.
next
();
if
(
strTime
.
indexOf
(
"-"
)>
0
&&
format
.
indexOf
(
"-"
)<
0
)
continue
;
if
(
strTime
.
indexOf
(
"-"
)<
0
&&
format
.
indexOf
(
"-"
)>
0
)
continue
;
if
(
strTime
.
length
()>
format
.
length
())
continue
;
date
=
parseStrToDate
(
strTime
,
format
);
if
(
date
!=
null
)
break
;
}
return
date
;
}
/**
* 解析两个日期之间的所有月份
* @param beginDateStr 开始日期,至少精确到yyyy-MM
* @param endDateStr 结束日期,至少精确到yyyy-MM
* @return yyyy-MM日期集合
*/
public
static
List
<
String
>
getMonthListOfDate
(
String
beginDateStr
,
String
endDateStr
)
{
// 指定要解析的时间格式
SimpleDateFormat
f
=
new
SimpleDateFormat
(
"yyyy-MM"
);
// 返回的月份列表
String
sRet
=
""
;
// 定义一些变量
Date
beginDate
=
null
;
Date
endDate
=
null
;
GregorianCalendar
beginGC
=
null
;
GregorianCalendar
endGC
=
null
;
List
<
String
>
list
=
new
ArrayList
<
String
>();
try
{
// 将字符串parse成日期
beginDate
=
f
.
parse
(
beginDateStr
);
endDate
=
f
.
parse
(
endDateStr
);
// 设置日历
beginGC
=
new
GregorianCalendar
();
beginGC
.
setTime
(
beginDate
);
endGC
=
new
GregorianCalendar
();
endGC
.
setTime
(
endDate
);
// 直到两个时间相同
while
(
beginGC
.
getTime
().
compareTo
(
endGC
.
getTime
())
<=
0
)
{
sRet
=
beginGC
.
get
(
Calendar
.
YEAR
)
+
"-"
+
(
beginGC
.
get
(
Calendar
.
MONTH
)
+
1
);
list
.
add
(
sRet
);
// 以月为单位,增加时间
beginGC
.
add
(
Calendar
.
MONTH
,
1
);
}
return
list
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
/**
* 解析两个日期段之间的所有日期
* @param beginDateStr 开始日期 ,至少精确到yyyy-MM-dd
* @param endDateStr 结束日期 ,至少精确到yyyy-MM-dd
* @return yyyy-MM-dd日期集合
*/
public
static
List
<
String
>
getDayListOfDate
(
String
beginDateStr
,
String
endDateStr
)
{
// 指定要解析的时间格式
SimpleDateFormat
f
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
// 定义一些变量
Date
beginDate
=
null
;
Date
endDate
=
null
;
Calendar
beginGC
=
null
;
Calendar
endGC
=
null
;
List
<
String
>
list
=
new
ArrayList
<
String
>();
try
{
// 将字符串parse成日期
beginDate
=
f
.
parse
(
beginDateStr
);
endDate
=
f
.
parse
(
endDateStr
);
// 设置日历
beginGC
=
Calendar
.
getInstance
();
beginGC
.
setTime
(
beginDate
);
endGC
=
Calendar
.
getInstance
();
endGC
.
setTime
(
endDate
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
// 直到两个时间相同
while
(
beginGC
.
getTime
().
compareTo
(
endGC
.
getTime
())
<=
0
)
{
list
.
add
(
sdf
.
format
(
beginGC
.
getTime
()));
// 以日为单位,增加时间
beginGC
.
add
(
Calendar
.
DAY_OF_MONTH
,
1
);
}
return
list
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
/**
* 获取当下年份指定前后数量的年份集合
* @param before 当下年份前年数
* @param behind 当下年份后年数
* @return 集合
*/
public
static
List
<
Integer
>
getYearListOfYears
(
int
before
,
int
behind
)
{
if
(
before
<
0
||
behind
<
0
)
{
return
null
;
}
List
<
Integer
>
list
=
new
ArrayList
<
Integer
>();
Calendar
c
=
null
;
c
=
Calendar
.
getInstance
();
c
.
setTime
(
new
Date
());
int
currYear
=
Calendar
.
getInstance
().
get
(
Calendar
.
YEAR
);
int
startYear
=
currYear
-
before
;
int
endYear
=
currYear
+
behind
;
for
(
int
i
=
startYear
;
i
<
endYear
;
i
++)
{
list
.
add
(
Integer
.
valueOf
(
i
));
}
return
list
;
}
/**
* 获取当前日期是一年中第几周
* @param date
* @return
*/
public
static
Integer
getWeekthOfYear
(
Date
date
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
setFirstDayOfWeek
(
Calendar
.
MONDAY
);
c
.
setMinimalDaysInFirstWeek
(
7
);
c
.
setTime
(
date
);
return
c
.
get
(
Calendar
.
WEEK_OF_YEAR
);
}
/**
* 获取某一年各星期的始终时间
* 实例:getWeekList(2016),第52周(从2016-12-26至2017-01-01)
* @param 年份
* @return
*/
public
static
HashMap
<
Integer
,
String
>
getWeekTimeOfYear
(
int
year
)
{
HashMap
<
Integer
,
String
>
map
=
new
LinkedHashMap
<
Integer
,
String
>();
Calendar
c
=
new
GregorianCalendar
();
c
.
set
(
year
,
Calendar
.
DECEMBER
,
31
,
23
,
59
,
59
);
int
count
=
getWeekthOfYear
(
c
.
getTime
());
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
String
dayOfWeekStart
=
""
;
String
dayOfWeekEnd
=
""
;
for
(
int
i
=
1
;
i
<=
count
;
i
++)
{
dayOfWeekStart
=
sdf
.
format
(
getFirstDayOfWeek
(
year
,
i
));
dayOfWeekEnd
=
sdf
.
format
(
getLastDayOfWeek
(
year
,
i
));
map
.
put
(
Integer
.
valueOf
(
i
),
"第"
+
i
+
"周(从"
+
dayOfWeekStart
+
"至"
+
dayOfWeekEnd
+
")"
);
}
return
map
;
}
/**
* 获取某一年的总周数
* @param year
* @return
*/
public
static
Integer
getWeekCountOfYear
(
int
year
){
Calendar
c
=
new
GregorianCalendar
();
c
.
set
(
year
,
Calendar
.
DECEMBER
,
31
,
23
,
59
,
59
);
int
count
=
getWeekthOfYear
(
c
.
getTime
());
return
count
;
}
/**
* 获取指定日期所在周的第一天
* @param date
* @return
*/
public
static
Date
getFirstDayOfWeek
(
Date
date
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
setFirstDayOfWeek
(
Calendar
.
MONDAY
);
c
.
setTime
(
date
);
c
.
set
(
Calendar
.
DAY_OF_WEEK
,
c
.
getFirstDayOfWeek
());
// Monday
return
c
.
getTime
();
}
/**
* 获取指定日期所在周的最后一天
* @param date
* @return
*/
public
static
Date
getLastDayOfWeek
(
Date
date
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
setFirstDayOfWeek
(
Calendar
.
MONDAY
);
c
.
setTime
(
date
);
c
.
set
(
Calendar
.
DAY_OF_WEEK
,
c
.
getFirstDayOfWeek
()
+
6
);
// Sunday
return
c
.
getTime
();
}
/**
* 获取某年某周的第一天
* @param year 目标年份
* @param week 目标周数
* @return
*/
public
static
Date
getFirstDayOfWeek
(
int
year
,
int
week
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
set
(
Calendar
.
YEAR
,
year
);
c
.
set
(
Calendar
.
MONTH
,
Calendar
.
JANUARY
);
c
.
set
(
Calendar
.
DATE
,
1
);
Calendar
cal
=
(
GregorianCalendar
)
c
.
clone
();
cal
.
add
(
Calendar
.
DATE
,
week
*
7
);
return
getFirstDayOfWeek
(
cal
.
getTime
());
}
/**
* 获取某年某周的最后一天
* @param year 目标年份
* @param week 目标周数
* @return
*/
public
static
Date
getLastDayOfWeek
(
int
year
,
int
week
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
set
(
Calendar
.
YEAR
,
year
);
c
.
set
(
Calendar
.
MONTH
,
Calendar
.
JANUARY
);
c
.
set
(
Calendar
.
DATE
,
1
);
Calendar
cal
=
(
GregorianCalendar
)
c
.
clone
();
cal
.
add
(
Calendar
.
DATE
,
week
*
7
);
return
getLastDayOfWeek
(
cal
.
getTime
());
}
/**
* 获取某年某月的第一天
* @param year 目标年份
* @param month 目标月份
* @return
*/
public
static
Date
getFirstDayOfMonth
(
int
year
,
int
month
){
month
=
month
-
1
;
Calendar
c
=
Calendar
.
getInstance
();
c
.
set
(
Calendar
.
YEAR
,
year
);
c
.
set
(
Calendar
.
MONTH
,
month
);
int
day
=
c
.
getActualMinimum
(
c
.
DAY_OF_MONTH
);
c
.
set
(
Calendar
.
DAY_OF_MONTH
,
day
);
c
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
c
.
set
(
Calendar
.
MINUTE
,
0
);
c
.
set
(
Calendar
.
SECOND
,
0
);
c
.
set
(
Calendar
.
MILLISECOND
,
0
);
return
c
.
getTime
();
}
/**
* 获取某年某月的最后一天
* @param year 目标年份
* @param month 目标月份
* @return
*/
public
static
Date
getLastDayOfMonth
(
int
year
,
int
month
){
month
=
month
-
1
;
Calendar
c
=
Calendar
.
getInstance
();
c
.
set
(
Calendar
.
YEAR
,
year
);
c
.
set
(
Calendar
.
MONTH
,
month
);
int
day
=
c
.
getActualMaximum
(
c
.
DAY_OF_MONTH
);
c
.
set
(
Calendar
.
DAY_OF_MONTH
,
day
);
c
.
set
(
Calendar
.
HOUR_OF_DAY
,
23
);
c
.
set
(
Calendar
.
MINUTE
,
59
);
c
.
set
(
Calendar
.
SECOND
,
59
);
c
.
set
(
Calendar
.
MILLISECOND
,
999
);
return
c
.
getTime
();
}
/**
* 获取某个日期为星期几
* @param date
* @return String "星期*"
*/
public
static
String
getDayWeekOfDate1
(
Date
date
)
{
String
[]
weekDays
=
{
"星期日"
,
"星期一"
,
"星期二"
,
"星期三"
,
"星期四"
,
"星期五"
,
"星期六"
};
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
int
w
=
cal
.
get
(
Calendar
.
DAY_OF_WEEK
)
-
1
;
if
(
w
<
0
)
w
=
0
;
return
weekDays
[
w
];
}
/**
* 获得指定日期的星期几数
* @param date
* @return int
*/
public
static
Integer
getDayWeekOfDate2
(
Date
date
){
Calendar
aCalendar
=
Calendar
.
getInstance
();
aCalendar
.
setTime
(
date
);
int
weekDay
=
aCalendar
.
get
(
Calendar
.
DAY_OF_WEEK
);
return
weekDay
;
}
/**
* 验证字符串是否为日期
* 验证格式:YYYYMMDD、YYYY_MM_DD、YYYYMMDDHHMISS、YYYYMMDD_HH_MI、YYYY_MM_DD_HH_MI、YYYYMMDDHHMISSSSS、YYYY_MM_DD_HH_MI_SS
* @param strTime
* @return null时返回false;true为日期,false不为日期
*/
public
static
boolean
validateIsDate
(
String
strTime
)
{
if
(
strTime
==
null
||
strTime
.
trim
().
length
()
<=
0
)
return
false
;
Date
date
=
null
;
List
<
String
>
list
=
new
ArrayList
<
String
>(
0
);
list
.
add
(
DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS
);
list
.
add
(
DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS
);
list
.
add
(
DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI
);
list
.
add
(
DATE_TIME_FORMAT_YYYYMMDD_HH_MI
);
list
.
add
(
DATE_TIME_FORMAT_YYYYMMDDHHMISS
);
list
.
add
(
DATE_FORMAT_YYYY_MM_DD
);
//list.add(DATE_FORMAT_YY_MM_DD);
list
.
add
(
DATE_FORMAT_YYYYMMDD
);
//list.add(DATE_FORMAT_YYYY_MM);
//list.add(DATE_FORMAT_YYYYMM);
//list.add(DATE_FORMAT_YYYY);
for
(
Iterator
iter
=
list
.
iterator
();
iter
.
hasNext
();)
{
String
format
=
(
String
)
iter
.
next
();
if
(
strTime
.
indexOf
(
"-"
)>
0
&&
format
.
indexOf
(
"-"
)<
0
)
continue
;
if
(
strTime
.
indexOf
(
"-"
)<
0
&&
format
.
indexOf
(
"-"
)>
0
)
continue
;
if
(
strTime
.
length
()>
format
.
length
())
continue
;
date
=
parseStrToDate
(
strTime
.
trim
(),
format
);
if
(
date
!=
null
)
break
;
}
if
(
date
!=
null
)
{
return
true
;
}
return
false
;
}
/**
* 将指定日期的时分秒格式为零
* @param date
* @return
*/
public
static
Date
formatHhMmSsOfDate
(
Date
date
)
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
cal
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cal
.
set
(
Calendar
.
MINUTE
,
0
);
cal
.
set
(
Calendar
.
SECOND
,
0
);
cal
.
set
(
Calendar
.
MILLISECOND
,
0
);
return
cal
.
getTime
();
}
/**
* 获得指定时间加减参数后的日期(不计算则输入0)
* @param date 指定日期
* @param year 年数,可正可负
* @param month 月数,可正可负
* @param day 天数,可正可负
* @param hour 小时数,可正可负
* @param minute 分钟数,可正可负
* @param second 秒数,可正可负
* @param millisecond 毫秒数,可正可负
* @return 计算后的日期
*/
public
static
Date
addDate
(
Date
date
,
int
year
,
int
month
,
int
day
,
int
hour
,
int
minute
,
int
second
,
int
millisecond
){
Calendar
c
=
Calendar
.
getInstance
();
c
.
setTime
(
date
);
c
.
add
(
Calendar
.
YEAR
,
year
);
//加减年数
c
.
add
(
Calendar
.
MONTH
,
month
);
//加减月数
c
.
add
(
Calendar
.
DATE
,
day
);
//加减天数
c
.
add
(
Calendar
.
HOUR
,
hour
);
//加减小时数
c
.
add
(
Calendar
.
MINUTE
,
minute
);
//加减分钟数
c
.
add
(
Calendar
.
SECOND
,
second
);
//加减秒
c
.
add
(
Calendar
.
MILLISECOND
,
millisecond
);
//加减毫秒数
return
c
.
getTime
();
}
/**
* 获得两个日期的时间戳之差
* @param startDate
* @param endDate
* @return
*/
public
static
Long
getDistanceTimestamp
(
Date
startDate
,
Date
endDate
){
long
daysBetween
=(
endDate
.
getTime
()-
startDate
.
getTime
()+
1000000
)/(
3600
*
24
*
1000
);
return
daysBetween
;
}
/**
* 判断二个时间是否为同年同月
* @param date1
* @param date2
* @return
*/
public
static
Boolean
compareIsSameMonth
(
Date
date1
,
Date
date2
){
boolean
flag
=
false
;
int
year1
=
getYear
(
date1
);
int
year2
=
getYear
(
date2
);
if
(
year1
==
year2
){
int
month1
=
getMonth
(
date1
);
int
month2
=
getMonth
(
date2
);
if
(
month1
==
month2
)
flag
=
true
;
}
return
flag
;
}
/**
* 获得两个时间相差距离多少天多少小时多少分多少秒
* @param str1 时间参数 1 格式:1990-01-01 12:00:00
* @param str2 时间参数 2 格式:2009-01-01 12:00:00
* @return long[] 返回值为:{天, 时, 分, 秒}
*/
public
static
long
[]
getDistanceTime
(
Date
one
,
Date
two
)
{
long
day
=
0
;
long
hour
=
0
;
long
min
=
0
;
long
sec
=
0
;
try
{
long
time1
=
one
.
getTime
();
long
time2
=
two
.
getTime
();
long
diff
;
if
(
time1
<
time2
)
{
diff
=
time2
-
time1
;
}
else
{
diff
=
time1
-
time2
;
}
day
=
diff
/
(
24
*
60
*
60
*
1000
);
hour
=
(
diff
/
(
60
*
60
*
1000
)
-
day
*
24
);
min
=
((
diff
/
(
60
*
1000
))
-
day
*
24
*
60
-
hour
*
60
);
sec
=
(
diff
/
1000
-
day
*
24
*
60
*
60
-
hour
*
60
*
60
-
min
*
60
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
long
[]
times
=
{
day
,
hour
,
min
,
sec
};
return
times
;
}
/**
* 两个时间相差距离多少天多少小时多少分多少秒
* @param str1 时间参数 1 格式:1990-01-01 12:00:00
* @param str2 时间参数 2 格式:2009-01-01 12:00:00
* @return String 返回值为:{天, 时, 分, 秒}
*/
public
static
long
[]
getDistanceTime
(
String
str1
,
String
str2
)
{
DateFormat
df
=
new
SimpleDateFormat
(
DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS
);
Date
one
;
Date
two
;
long
day
=
0
;
long
hour
=
0
;
long
min
=
0
;
long
sec
=
0
;
try
{
one
=
df
.
parse
(
str1
);
two
=
df
.
parse
(
str2
);
long
time1
=
one
.
getTime
();
long
time2
=
two
.
getTime
();
long
diff
;
if
(
time1
<
time2
)
{
diff
=
time2
-
time1
;
}
else
{
diff
=
time1
-
time2
;
}
day
=
diff
/
(
24
*
60
*
60
*
1000
);
hour
=
(
diff
/
(
60
*
60
*
1000
)
-
day
*
24
);
min
=
((
diff
/
(
60
*
1000
))
-
day
*
24
*
60
-
hour
*
60
);
sec
=
(
diff
/
1000
-
day
*
24
*
60
*
60
-
hour
*
60
*
60
-
min
*
60
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
long
[]
times
=
{
day
,
hour
,
min
,
sec
};
return
times
;
}
/**
* 两个时间之间相差距离多少天
* @param one 时间参数 1:
* @param two 时间参数 2:
* @return 相差天数
*/
public
static
Long
getDistanceDays
(
String
str1
,
String
str2
)
throws
Exception
{
DateFormat
df
=
new
SimpleDateFormat
(
DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS
);
Date
one
;
Date
two
;
long
days
=
0
;
try
{
one
=
df
.
parse
(
str1
);
two
=
df
.
parse
(
str2
);
long
time1
=
one
.
getTime
();
long
time2
=
two
.
getTime
();
long
diff
;
if
(
time1
<
time2
)
{
diff
=
time2
-
time1
;
}
else
{
diff
=
time1
-
time2
;
}
days
=
diff
/
(
1000
*
60
*
60
*
24
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
days
;
}
/**
* 获取指定时间的那天 00:00:00.000 的时间
* @param date
* @return
*/
public
static
Date
getDayBeginTime
(
final
Date
date
)
{
Calendar
c
=
Calendar
.
getInstance
();
c
.
setTime
(
date
);
c
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
c
.
set
(
Calendar
.
MINUTE
,
0
);
c
.
set
(
Calendar
.
SECOND
,
0
);
c
.
set
(
Calendar
.
MILLISECOND
,
0
);
return
c
.
getTime
();
}
/**
* 获取指定时间的那天 23:59:59.999 的时间
* @param date
* @return
*/
public
static
Date
getDayEndTime
(
final
Date
date
)
{
Calendar
c
=
Calendar
.
getInstance
();
c
.
setTime
(
date
);
c
.
set
(
Calendar
.
HOUR_OF_DAY
,
23
);
c
.
set
(
Calendar
.
MINUTE
,
59
);
c
.
set
(
Calendar
.
SECOND
,
59
);
c
.
set
(
Calendar
.
MILLISECOND
,
999
);
return
c
.
getTime
();
}
/**
*
* @param begin 开始日期
* @param end 结束日期
* @return 开始与结束之间的所以日期,包括起止
*/
public
static
List
<
LocalDate
>
getMiddleDate
(
LocalDate
begin
,
LocalDate
end
)
{
List
<
LocalDate
>
localDateList
=
new
ArrayList
<>();
long
length
=
end
.
getMonthValue
()
-
begin
.
getMonthValue
();
for
(
long
i
=
length
;
i
>=
0
;
i
--)
{
localDateList
.
add
(
end
.
minusMonths
(
i
));
}
return
localDateList
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment