Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
C
common
Project
Project
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
曲欣亮
common
Commits
28cf2dc7
Commit
28cf2dc7
authored
Dec 20, 2018
by
Quxl
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://key@gitlab.egolm.com/key/common.git
parents
b76aaa3b
c42a5e27
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
454 additions
and
431 deletions
+454
-431
DateUtil.java
src/main/java/com/egolm/common/DateUtil.java
+454
-431
No files found.
src/main/java/com/egolm/common/DateUtil.java
View file @
28cf2dc7
package
com
.
egolm
.
common
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.GregorianCalendar
;
import
java.util.LinkedHashMap
;
import
java.util.Locale
;
import
java.util.Map
;
import
java.util.SimpleTimeZone
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
public
class
DateUtil
{
public
static
final
String
FMT_HH
=
"HH"
;
public
static
final
String
FMT_DATE_HH
=
"yyyy-MM-dd HH"
;
public
static
final
String
FMT_TIME
=
"HH:mm:ss"
;
public
static
final
String
FMT_DATE
=
"yyyy-MM-dd"
;
public
static
final
String
FMTDATE
=
"yyyyMMdd"
;
public
static
final
String
FMT_DATE_MINUTE
=
"yyyy-MM-dd HH:mm"
;
public
static
final
String
FMT_DATE_SECOND
=
"yyyy-MM-dd HH:mm:ss"
;
public
static
final
String
FMT_DATE_MILLISECOND
=
"yyyy-MM-dd HH:mm:ss.SSS"
;
public
static
final
String
FMT_A_DATE
=
"yyyy/MM/dd"
;
public
static
final
String
FMT_A_DATE_MINUTE
=
"yyyy/MM/dd HH:mm"
;
public
static
final
String
FMT_A_DATE_SECOND
=
"yyyy/MM/dd HH:mm:ss"
;
public
static
final
String
FMT_A_DATE_MILLISECOND
=
"yyyy/MM/dd HH:mm:ss.SSS"
;
public
static
final
String
FMT_DATE_ISO
=
"yyyy-MM-ddTHH:mm:ss.SSSZ"
;
public
static
final
String
FMT_UTC_GMT
=
"EEE, dd MMM yyyy HH:mm:ss z"
;
public
static
final
String
FMT_YYYYMMddHHMMSS
=
"yyyyMMddHHmmss"
;
public
static
final
String
FMT_UTC_ALIYUN
=
"yyyy-MM-dd'T'HH:mm:ss'Z'"
;
public
static
final
Long
SECOND
=
1000L
;
public
static
final
Long
MINUTE
=
1000L
*
60
;
public
static
final
Long
HALF_HOUR
=
MINUTE
*
30
;
public
static
final
Long
HOUR
=
HALF_HOUR
*
2
;
public
static
final
Long
HALF_DAY
=
HOUR
*
12
;
public
static
final
Long
DAY
=
HALF_DAY
*
2
;
private
static
final
Map
<
Pattern
,
String
>
PATTERN_DATE
=
new
LinkedHashMap
<
Pattern
,
String
>();
static
{
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月(([0]?[1-9])|([1-2][0-9])|([3][0-1]))日\\s+\\d{1,2}时\\d{1,2}分\\d{1,2}秒)"
),
"yyyy年MM月dd日 HH时mm分ss秒"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月(([0]?[1-9])|([1-2][0-9])|([3][0-1]))日\\s+\\d{1,2}:\\d{1,2}:\\d{1,2})"
),
"yyyy年MM月dd日 HH:mm:ss"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月(([0]?[1-9])|([1-2][0-9])|([3][0-1]))日)"
),
"yyyy年MM月dd日"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月)"
),
"yyyy年MM月"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年)"
),
"yyyy年"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z)"
),
DateUtil
.
FMT_DATE_ISO
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_A_DATE_SECOND
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_A_DATE_MINUTE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}/\\d{1,2}/\\d{1,2})"
),
DateUtil
.
FMT_A_DATE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_DATE_SECOND
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_DATE_MINUTE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{1,2}-\\d{1,2})"
),
DateUtil
.
FMT_DATE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1])))"
),
"yyyyMMdd"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})(([0][1-9])|([1][0-2])))"
),
"yyyyMM"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"([1-2][0-9]{3})"
),
"yyyy"
);
}
/**
* 将日期字符串转化成日期类型
* @param date
* @param fmt
* @return
* @throws ParseException
*/
public
static
Date
parse
(
String
date
,
String
fmt
)
{
try
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
fmt
);
Date
newdate
=
sdf
.
parse
(
date
);
return
newdate
;
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
date
+
" parse to"
+
fmt
,
e
);
}
}
/**
* 自动判断日期字符串格式并将其转化为日期类型
* @param str
* @return
*/
public
static
Date
parse
(
Object
obj
)
{
if
(
obj
instanceof
Date
)
{
return
new
Date
(((
Date
)
obj
).
getTime
());
}
else
{
String
str
=
String
.
valueOf
(
obj
).
trim
();
if
(
StringUtil
.
isNotEmpty
(
str
))
{
for
(
Pattern
pattern
:
PATTERN_DATE
.
keySet
())
{
Matcher
matcher
=
pattern
.
matcher
(
str
);
if
(
matcher
.
find
())
{
String
date_str
=
matcher
.
group
(
1
);
if
(
PATTERN_DATE
.
get
(
pattern
).
equals
(
DateUtil
.
FMT_DATE_ISO
))
{
return
parseISODate
(
date_str
);
}
else
{
return
parse
(
date_str
,
PATTERN_DATE
.
get
(
pattern
));
}
}
}
}
return
null
;
}
}
public
static
Date
parseISODate
(
String
isoDate
)
{
isoDate
=
isoDate
.
replace
(
"T"
,
" "
).
replace
(
"Z"
,
""
);
Date
date
=
parse
(
isoDate
);
java
.
util
.
Calendar
cal
=
java
.
util
.
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
int
zoneOffset
=
cal
.
get
(
java
.
util
.
Calendar
.
ZONE_OFFSET
);
int
dstOffset
=
cal
.
get
(
java
.
util
.
Calendar
.
DST_OFFSET
);
cal
.
add
(
Calendar
.
MILLISECOND
,
(
zoneOffset
+
dstOffset
));
return
cal
.
getTime
();
}
public
static
boolean
isDate
(
Object
obj
)
{
if
(
obj
instanceof
Date
)
{
return
true
;
}
else
{
String
str
=
String
.
valueOf
(
obj
);
if
(
StringUtil
.
isNotEmpty
(
str
))
{
String
date_str
=
str
.
trim
();
for
(
Pattern
pattern
:
PATTERN_DATE
.
keySet
())
{
if
(
pattern
.
matcher
(
date_str
).
find
())
{
return
true
;
}
}
}
return
false
;
}
}
/**
* 格式化日期为字符串
* @param date
* @param fmt
* @return
*/
public
static
String
format
(
Date
date
,
String
fmt
)
{
if
(
date
==
null
)
{
return
null
;
}
else
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
fmt
);
return
sdf
.
format
(
date
);
}
}
/**
* 格式化为yyyy-MM-dd格式
* @param date 时间参数
* @return yyyy-MM-dd
*/
public
static
String
formatDate
(
Date
date
)
{
return
format
(
date
,
DateUtil
.
FMT_DATE
);
}
/**
* 格式化日期为yyyy-MM-dd HH:mm:ss格式
* @param date
* @return yyyy-MM-dd HH:mm:ss
*/
public
static
String
format
(
Date
date
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
DateUtil
.
FMT_DATE_SECOND
);
return
sdf
.
format
(
date
);
}
public
static
String
formatUTCDate
(
Date
date
)
{
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"EEE, dd MMM yyyy HH:mm:ss z"
,
Locale
.
ENGLISH
);
dateFormat
.
setTimeZone
(
new
SimpleTimeZone
(
0
,
"UTC"
));
return
dateFormat
.
format
(
date
);
}
public
static
String
formatGMTDate
(
Date
date
)
{
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"EEE, dd MMM yyyy HH:mm:ss z"
,
Locale
.
ENGLISH
);
dateFormat
.
setTimeZone
(
new
SimpleTimeZone
(
0
,
"GMT"
));
return
dateFormat
.
format
(
date
);
}
/**
* 将毫秒数格式化成默认格式日期字符串
* 默认格式:yyyy-MM-dd HH:mm:ss
* @param time
* @return
*/
public
static
String
format
(
Long
time
)
{
if
(
time
!=
null
)
{
Date
date
=
new
Date
(
time
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
DateUtil
.
FMT_DATE_SECOND
);
return
sdf
.
format
(
date
);
}
else
{
return
null
;
}
}
/**
* 将毫秒数格式化为制定格式的日期字符串
* @param time
* @param fmt
* @return
*/
public
static
String
format
(
Long
time
,
String
fmt
)
{
if
(
time
!=
null
)
{
Date
date
=
new
Date
(
time
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
fmt
);
return
sdf
.
format
(
date
);
}
else
{
return
null
;
}
}
/**
* 将毫秒数格式化为时间格式字符串
* 毫秒数必须小于86400000
* @param time
* @return
*/
public
static
String
format
(
Integer
time
)
{
return
format
(
time
,
DateUtil
.
FMT_TIME
);
}
/**
* 将毫秒数格式化为时间格式字符串
* 毫秒数必须小于86400000
* @param time
* @param fmt
* @return
*/
public
static
String
format
(
Integer
time
,
String
fmt
)
{
if
(
time
!=
null
)
{
if
(
time
<
86400000
)
{
Date
date
=
new
Date
(
time
-
(
1000
*
60
*
60
*
8
));
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
fmt
);
return
sdf
.
format
(
date
);
}
else
{
throw
new
RuntimeException
(
"Can't greater than 86400000"
);
}
}
else
{
return
null
;
}
}
/**
* 计算指定时间当天的开始时间
* @param time
* @return
* @throws ParseException
*/
public
static
Date
noon
(
Date
time
)
{
Long
start
=
start
(
time
==
null
?
new
Date
()
:
time
).
getTime
();
return
new
Date
(
start
+
HALF_DAY
);
}
/**
* 计算指定时间当天的开始时间
* @param time
* @return
* @throws ParseException
*/
public
static
Date
start
(
Date
time
)
{
if
(
time
!=
null
)
{
return
parse
(
format
(
time
,
DateUtil
.
FMT_DATE
),
DateUtil
.
FMT_DATE
);
}
else
{
return
null
;
}
}
/**
* 计算指定日期当天的最后时间
* @param time
* @return
* @throws ParseException
*/
public
static
Date
end
(
Date
time
)
{
if
(
time
!=
null
)
{
return
new
Date
(
start
(
new
Date
(
time
.
getTime
()
+
(
24L
*
60L
*
60L
*
1000L
))).
getTime
());
}
else
{
return
null
;
}
}
/**
* 取得当前时间向后或向前若干天的时间
* @param time
* @param offset
* @return
*/
public
static
Date
day
(
Date
time
,
Integer
offset
)
{
Date
date
=
new
Date
(
time
.
getTime
()
+
(
offset
*
86400000L
));
return
date
;
}
/**
* 计算指定的日期是星期几,返回数字 周日至周六分别是0-6
* @param date
* @return
*/
public
static
Integer
week
(
Date
date
)
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
return
calendar
.
get
(
Calendar
.
DAY_OF_WEEK
)
-
1
;
}
/**
* 计算两天之间相隔多少天
* @param start
* @param end
* @return
*/
public
static
Integer
days
(
Date
start
,
Date
end
)
{
Date
date_start
=
start
(
start
);
Date
date_end
=
start
(
end
);
return
(
int
)((
date_end
.
getTime
()
-
date_start
.
getTime
())
/
86400000L
);
}
/**
* 判断是否是今天
* @param date
* @return
*/
public
static
boolean
isToday
(
Date
date
)
{
Date
today
=
new
Date
();
Date
start
=
start
(
today
);
Date
end
=
end
(
today
);
if
(
date
.
getTime
()
>=
start
.
getTime
()
&&
date
.
getTime
()
<
end
.
getTime
())
{
return
true
;
}
else
{
return
false
;
}
}
/**
* 取得当前日期是多少周
* @param date
* @return
*/
public
static
int
getWeekOfYear
(
Date
date
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
setFirstDayOfWeek
(
Calendar
.
MONDAY
);
c
.
setMinimalDaysInFirstWeek
(
7
);
c
.
setTime
(
date
);
return
c
.
get
(
Calendar
.
WEEK_OF_YEAR
);
}
/**
* 得到某一年周的总数
* @param year
* @return
*/
public
static
int
getMaxWeekNumOfYear
(
int
year
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
set
(
year
,
Calendar
.
DECEMBER
,
31
,
23
,
59
,
59
);
return
getWeekOfYear
(
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 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
);
return
c
.
getTime
();
}
/**
* 取得当前日期所在月的第一天
* @param date
* @return
*/
public
static
Date
getFirstDayOfMonth
(
Date
date
){
Calendar
c
=
Calendar
.
getInstance
();
c
.
add
(
Calendar
.
MONTH
,
0
);
c
.
set
(
Calendar
.
DAY_OF_MONTH
,
1
);
//设置为1号,当前日期既为本月第一天
return
c
.
getTime
();
}
public
static
String
getTimeStamp
()
{
return
String
.
valueOf
(
System
.
currentTimeMillis
()
/
1000
);
}
}
package
com
.
egolm
.
common
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.GregorianCalendar
;
import
java.util.LinkedHashMap
;
import
java.util.Locale
;
import
java.util.Map
;
import
java.util.SimpleTimeZone
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
public
class
DateUtil
{
public
static
final
String
FMT_HH
=
"HH"
;
public
static
final
String
FMT_DATE_HH
=
"yyyy-MM-dd HH"
;
public
static
final
String
FMT_TIME
=
"HH:mm:ss"
;
public
static
final
String
FMT_DATE
=
"yyyy-MM-dd"
;
public
static
final
String
FMTDATE
=
"yyyyMMdd"
;
public
static
final
String
FMT_DATE_MINUTE
=
"yyyy-MM-dd HH:mm"
;
public
static
final
String
FMT_DATE_SECOND
=
"yyyy-MM-dd HH:mm:ss"
;
public
static
final
String
FMT_DATE_MILLISECOND
=
"yyyy-MM-dd HH:mm:ss.SSS"
;
public
static
final
String
FMT_A_DATE
=
"yyyy/MM/dd"
;
public
static
final
String
FMT_A_DATE_MINUTE
=
"yyyy/MM/dd HH:mm"
;
public
static
final
String
FMT_A_DATE_SECOND
=
"yyyy/MM/dd HH:mm:ss"
;
public
static
final
String
FMT_A_DATE_MILLISECOND
=
"yyyy/MM/dd HH:mm:ss.SSS"
;
public
static
final
String
FMT_DATE_ISO
=
"yyyy-MM-ddTHH:mm:ss.SSSZ"
;
public
static
final
String
FMT_UTC_GMT
=
"EEE, dd MMM yyyy HH:mm:ss z"
;
public
static
final
String
FMT_YYYYMMddHHMMSS
=
"yyyyMMddHHmmss"
;
public
static
final
String
FMT_UTC_ALIYUN
=
"yyyy-MM-dd'T'HH:mm:ss'Z'"
;
public
static
final
String
FMT_YYYY_MM
=
"yyyy/MM"
;
public
static
final
Long
SECOND
=
1000L
;
public
static
final
Long
MINUTE
=
1000L
*
60
;
public
static
final
Long
HALF_HOUR
=
MINUTE
*
30
;
public
static
final
Long
HOUR
=
HALF_HOUR
*
2
;
public
static
final
Long
HALF_DAY
=
HOUR
*
12
;
public
static
final
Long
DAY
=
HALF_DAY
*
2
;
private
static
final
Map
<
Pattern
,
String
>
PATTERN_DATE
=
new
LinkedHashMap
<
Pattern
,
String
>();
static
{
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月(([0]?[1-9])|([1-2][0-9])|([3][0-1]))日\\s+\\d{1,2}时\\d{1,2}分\\d{1,2}秒)"
),
"yyyy年MM月dd日 HH时mm分ss秒"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月(([0]?[1-9])|([1-2][0-9])|([3][0-1]))日\\s+\\d{1,2}:\\d{1,2}:\\d{1,2})"
),
"yyyy年MM月dd日 HH:mm:ss"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月(([0]?[1-9])|([1-2][0-9])|([3][0-1]))日)"
),
"yyyy年MM月dd日"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月)"
),
"yyyy年MM月"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年)"
),
"yyyy年"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z)"
),
DateUtil
.
FMT_DATE_ISO
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_A_DATE_SECOND
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_A_DATE_MINUTE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}/\\d{1,2}/\\d{1,2})"
),
DateUtil
.
FMT_A_DATE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_DATE_SECOND
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_DATE_MINUTE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{1,2}-\\d{1,2})"
),
DateUtil
.
FMT_DATE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1])))"
),
"yyyyMMdd"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})(([0][1-9])|([1][0-2])))"
),
"yyyyMM"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"([1-2][0-9]{3})"
),
"yyyy"
);
}
/**
* 将日期字符串转化成日期类型
* @param date
* @param fmt
* @return
* @throws ParseException
*/
public
static
Date
parse
(
String
date
,
String
fmt
)
{
try
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
fmt
);
Date
newdate
=
sdf
.
parse
(
date
);
return
newdate
;
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
date
+
" parse to"
+
fmt
,
e
);
}
}
/**
* 自动判断日期字符串格式并将其转化为日期类型
* @param str
* @return
*/
public
static
Date
parse
(
Object
obj
)
{
if
(
obj
instanceof
Date
)
{
return
new
Date
(((
Date
)
obj
).
getTime
());
}
else
{
String
str
=
String
.
valueOf
(
obj
).
trim
();
if
(
StringUtil
.
isNotEmpty
(
str
))
{
for
(
Pattern
pattern
:
PATTERN_DATE
.
keySet
())
{
Matcher
matcher
=
pattern
.
matcher
(
str
);
if
(
matcher
.
find
())
{
String
date_str
=
matcher
.
group
(
1
);
if
(
PATTERN_DATE
.
get
(
pattern
).
equals
(
DateUtil
.
FMT_DATE_ISO
))
{
return
parseISODate
(
date_str
);
}
else
{
return
parse
(
date_str
,
PATTERN_DATE
.
get
(
pattern
));
}
}
}
}
return
null
;
}
}
public
static
Date
parseISODate
(
String
isoDate
)
{
isoDate
=
isoDate
.
replace
(
"T"
,
" "
).
replace
(
"Z"
,
""
);
Date
date
=
parse
(
isoDate
);
java
.
util
.
Calendar
cal
=
java
.
util
.
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
int
zoneOffset
=
cal
.
get
(
java
.
util
.
Calendar
.
ZONE_OFFSET
);
int
dstOffset
=
cal
.
get
(
java
.
util
.
Calendar
.
DST_OFFSET
);
cal
.
add
(
Calendar
.
MILLISECOND
,
(
zoneOffset
+
dstOffset
));
return
cal
.
getTime
();
}
public
static
boolean
isDate
(
Object
obj
)
{
if
(
obj
instanceof
Date
)
{
return
true
;
}
else
{
String
str
=
String
.
valueOf
(
obj
);
if
(
StringUtil
.
isNotEmpty
(
str
))
{
String
date_str
=
str
.
trim
();
for
(
Pattern
pattern
:
PATTERN_DATE
.
keySet
())
{
if
(
pattern
.
matcher
(
date_str
).
find
())
{
return
true
;
}
}
}
return
false
;
}
}
/**
* 格式化日期为字符串
* @param date
* @param fmt
* @return
*/
public
static
String
format
(
Date
date
,
String
fmt
)
{
if
(
date
==
null
)
{
return
null
;
}
else
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
fmt
);
return
sdf
.
format
(
date
);
}
}
/**
* 格式化为yyyy-MM-dd格式
* @param date 时间参数
* @return yyyy-MM-dd
*/
public
static
String
formatDate
(
Date
date
)
{
return
format
(
date
,
DateUtil
.
FMT_DATE
);
}
/**
* 格式化日期为yyyy-MM-dd HH:mm:ss格式
* @param date
* @return yyyy-MM-dd HH:mm:ss
*/
public
static
String
format
(
Date
date
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
DateUtil
.
FMT_DATE_SECOND
);
return
sdf
.
format
(
date
);
}
public
static
String
formatUTCDate
(
Date
date
)
{
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"EEE, dd MMM yyyy HH:mm:ss z"
,
Locale
.
ENGLISH
);
dateFormat
.
setTimeZone
(
new
SimpleTimeZone
(
0
,
"UTC"
));
return
dateFormat
.
format
(
date
);
}
public
static
String
formatGMTDate
(
Date
date
)
{
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"EEE, dd MMM yyyy HH:mm:ss z"
,
Locale
.
ENGLISH
);
dateFormat
.
setTimeZone
(
new
SimpleTimeZone
(
0
,
"GMT"
));
return
dateFormat
.
format
(
date
);
}
/**
* 将毫秒数格式化成默认格式日期字符串
* 默认格式:yyyy-MM-dd HH:mm:ss
* @param time
* @return
*/
public
static
String
format
(
Long
time
)
{
if
(
time
!=
null
)
{
Date
date
=
new
Date
(
time
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
DateUtil
.
FMT_DATE_SECOND
);
return
sdf
.
format
(
date
);
}
else
{
return
null
;
}
}
/**
* 将毫秒数格式化为制定格式的日期字符串
* @param time
* @param fmt
* @return
*/
public
static
String
format
(
Long
time
,
String
fmt
)
{
if
(
time
!=
null
)
{
Date
date
=
new
Date
(
time
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
fmt
);
return
sdf
.
format
(
date
);
}
else
{
return
null
;
}
}
/**
* 将毫秒数格式化为时间格式字符串
* 毫秒数必须小于86400000
* @param time
* @return
*/
public
static
String
format
(
Integer
time
)
{
return
format
(
time
,
DateUtil
.
FMT_TIME
);
}
/**
* 将毫秒数格式化为时间格式字符串
* 毫秒数必须小于86400000
* @param time
* @param fmt
* @return
*/
public
static
String
format
(
Integer
time
,
String
fmt
)
{
if
(
time
!=
null
)
{
if
(
time
<
86400000
)
{
Date
date
=
new
Date
(
time
-
(
1000
*
60
*
60
*
8
));
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
fmt
);
return
sdf
.
format
(
date
);
}
else
{
throw
new
RuntimeException
(
"Can't greater than 86400000"
);
}
}
else
{
return
null
;
}
}
/**
* 计算指定时间当天的开始时间
* @param time
* @return
* @throws ParseException
*/
public
static
Date
noon
(
Date
time
)
{
Long
start
=
start
(
time
==
null
?
new
Date
()
:
time
).
getTime
();
return
new
Date
(
start
+
HALF_DAY
);
}
/**
* 计算指定时间当天的开始时间
* @param time
* @return
* @throws ParseException
*/
public
static
Date
start
(
Date
time
)
{
if
(
time
!=
null
)
{
return
parse
(
format
(
time
,
DateUtil
.
FMT_DATE
),
DateUtil
.
FMT_DATE
);
}
else
{
return
null
;
}
}
/**
* 计算指定日期当天的最后时间
* @param time
* @return
* @throws ParseException
*/
public
static
Date
end
(
Date
time
)
{
if
(
time
!=
null
)
{
return
new
Date
(
start
(
new
Date
(
time
.
getTime
()
+
(
24L
*
60L
*
60L
*
1000L
))).
getTime
());
}
else
{
return
null
;
}
}
/**
* 取得当前时间向后或向前若干天的时间
* @param time
* @param offset
* @return
*/
public
static
Date
day
(
Date
time
,
Integer
offset
)
{
Date
date
=
new
Date
(
time
.
getTime
()
+
(
offset
*
86400000L
));
return
date
;
}
/**
* 计算指定的日期是星期几,返回数字 周日至周六分别是0-6
* @param date
* @return
*/
public
static
Integer
week
(
Date
date
)
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
return
calendar
.
get
(
Calendar
.
DAY_OF_WEEK
)
-
1
;
}
/**
* 计算两天之间相隔多少天
* @param start
* @param end
* @return
*/
public
static
Integer
days
(
Date
start
,
Date
end
)
{
Date
date_start
=
start
(
start
);
Date
date_end
=
start
(
end
);
return
(
int
)((
date_end
.
getTime
()
-
date_start
.
getTime
())
/
86400000L
);
}
/**
* 判断是否是今天
* @param date
* @return
*/
public
static
boolean
isToday
(
Date
date
)
{
Date
today
=
new
Date
();
Date
start
=
start
(
today
);
Date
end
=
end
(
today
);
if
(
date
.
getTime
()
>=
start
.
getTime
()
&&
date
.
getTime
()
<
end
.
getTime
())
{
return
true
;
}
else
{
return
false
;
}
}
/**
* 取得当前日期是多少周
* @param date
* @return
*/
public
static
int
getWeekOfYear
(
Date
date
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
setFirstDayOfWeek
(
Calendar
.
MONDAY
);
c
.
setMinimalDaysInFirstWeek
(
7
);
c
.
setTime
(
date
);
return
c
.
get
(
Calendar
.
WEEK_OF_YEAR
);
}
/**
* 得到某一年周的总数
* @param year
* @return
*/
public
static
int
getMaxWeekNumOfYear
(
int
year
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
set
(
year
,
Calendar
.
DECEMBER
,
31
,
23
,
59
,
59
);
return
getWeekOfYear
(
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 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
);
return
c
.
getTime
();
}
/**
* 取得当前日期所在月的第一天
* @param date
* @return
*/
public
static
Date
getFirstDayOfMonth
(
Date
date
){
Calendar
c
=
Calendar
.
getInstance
();
c
.
add
(
Calendar
.
MONTH
,
0
);
c
.
set
(
Calendar
.
DAY_OF_MONTH
,
1
);
//设置为1号,当前日期既为本月第一天
return
c
.
getTime
();
}
/**
* 获取指定日期下个月的第一天 的日期
* @param dateStr
* @param format
* @return
*/
public
static
String
getFirstDayOfNextMonth
(
String
dateStr
,
String
format
){
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
format
);
try
{
Date
date
=
sdf
.
parse
(
dateStr
);
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
set
(
Calendar
.
DAY_OF_MONTH
,
1
);
calendar
.
add
(
Calendar
.
MONTH
,
1
);
return
sdf
.
format
(
calendar
.
getTime
());
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
public
static
String
getTimeStamp
()
{
return
String
.
valueOf
(
System
.
currentTimeMillis
()
/
1000
);
}
}
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