时间工具类--java
来源:互联网 发布:中国农村现状知乎 编辑:程序博客网 时间:2024/05/22 00:41
package
com.dayatang.utils;
import
java.security.InvalidParameterException;
import
java.text.ParseException;
import
java.util.Calendar;
import
java.util.Date;
public
class
DateUtils {
private
static
final
long
MILLIS_IN_A_SECOND =
1000
;
private
static
final
long
SECONDS_IN_A_MINUTE =
60
;
private
static
final
long
MINUTES_IN_AN_HOUR =
60
;
private
static
final
long
HOURS_IN_A_DAY =
24
;
private
static
final
int
DAYS_IN_A_WEEK =
7
;
private
static
final
int
MONTHS_IN_A_YEAR =
12
;
//private static final int[] daysInMonth = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
/**
* 最小日期,设定为1000年1月1日
*/
public
static
final
Date MIN_DATE = date(
1000
,
1
,
1
);
/**
* 最大日期,设定为8888年1月1日
*/
public
static
final
Date MAX_DATE = date(
8888
,
1
,
1
);
/**
* 根据年月日构建日期对象。注意月份是从1开始计数的,即month为1代表1月份。
* @param year 年
* @param month 月。注意1代表1月份,依此类推。
* @param day 日
* @return
*/
public
static
Date date(
int
year,
int
month,
int
date) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month -
1
, date,
0
,
0
,
0
);
calendar.set(Calendar.MILLISECOND,
0
);
return
calendar.getTime();
}
/**
* 计算两个日期(不包括时间)之间相差的周年数
*
* @param date1
* @param date2
* @return
*/
public
static
int
getYearDiff(Date date1, Date date2) {
if
(date1 ==
null
|| date2 ==
null
) {
throw
new
InvalidParameterException(
"date1 and date2 cannot be null!"
);
}
if
(date1.after(date2)) {
throw
new
InvalidParameterException(
"date1 cannot be after date2!"
);
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
int
year1 = calendar.get(Calendar.YEAR);
int
month1 = calendar.get(Calendar.MONTH);
int
day1 = calendar.get(Calendar.DATE);
calendar.setTime(date2);
int
year2 = calendar.get(Calendar.YEAR);
int
month2 = calendar.get(Calendar.MONTH);
int
day2 = calendar.get(Calendar.DATE);
int
result = year2 - year1;
if
(month2 < month1) {
result--;
}
else
if
(month2 == month1 && day2 < day1) {
result--;
}
return
result;
}
/**
* 计算两个日期(不包括时间)之间相差的整月数
*
* @param date1
* @param date2
* @return
*/
public
static
int
getMonthDiff(Date date1, Date date2) {
if
(date1 ==
null
|| date2 ==
null
) {
throw
new
InvalidParameterException(
"date1 and date2 cannot be null!"
);
}
if
(date1.after(date2)) {
throw
new
InvalidParameterException(
"date1 cannot be after date2!"
);
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
int
year1 = calendar.get(Calendar.YEAR);
int
month1 = calendar.get(Calendar.MONTH);
int
day1 = calendar.get(Calendar.DATE);
calendar.setTime(date2);
int
year2 = calendar.get(Calendar.YEAR);
int
month2 = calendar.get(Calendar.MONTH);
int
day2 = calendar.get(Calendar.DATE);
int
months =
0
;
if
(day2 >= day1) {
months = month2 - month1;
}
else
{
months = month2 - month1 -
1
;
}
return
(year2 - year1) * MONTHS_IN_A_YEAR + months;
}
/**
* 统计两个日期之间包含的天数。包含date1,但不包含date2
*
* @param date1
* @param date2
* @return
*/
public
static
int
getDayDiff(Date date1, Date date2) {
if
(date1 ==
null
|| date2 ==
null
) {
throw
new
InvalidParameterException(
"date1 and date2 cannot be null!"
);
}
Date startDate = org.apache.commons.lang3.time.DateUtils.truncate(
date1, Calendar.DATE);
Date endDate = org.apache.commons.lang3.time.DateUtils.truncate(date2,
Calendar.DATE);
if
(startDate.after(endDate)) {
throw
new
InvalidParameterException(
"date1 cannot be after date2!"
);
}
long
millSecondsInOneDay = HOURS_IN_A_DAY * MINUTES_IN_AN_HOUR
* SECONDS_IN_A_MINUTE * MILLIS_IN_A_SECOND;
return
(
int
) ((endDate.getTime() - startDate.getTime()) / millSecondsInOneDay);
}
/**
* 计算time2比time1晚多少分钟,忽略日期部分
*
* @param time1
* @param time2
* @return
*/
public
static
int
getMinuteDiffByTime(Date time1, Date time2) {
long
startMil =
0
;
long
endMil =
0
;
Calendar calendar = Calendar.getInstance();
calendar.setTime(time1);
calendar.set(
1900
,
1
,
1
);
startMil = calendar.getTimeInMillis();
calendar.setTime(time2);
calendar.set(
1900
,
1
,
1
);
endMil = calendar.getTimeInMillis();
return
(
int
) ((endMil - startMil) / MILLIS_IN_A_SECOND / SECONDS_IN_A_MINUTE);
}
/**
* 计算指定日期的前一天
*
* @param date
* @return
*/
public
static
Date getPrevDay(Date date) {
return
org.apache.commons.lang3.time.DateUtils.addDays(date, -
1
);
}
/**
* 计算指定日期的后一天
*
* @param date
* @return
*/
public
static
Date getNextDay(Date date) {
return
org.apache.commons.lang3.time.DateUtils.addDays(date,
1
);
}
/**
* 判断date1是否在date2之后,忽略时间部分
*
* @param date1
* @param date2
* @return
*/
public
static
boolean
isDateAfter(Date date1, Date date2) {
Date theDate1 = org.apache.commons.lang3.time.DateUtils.truncate(date1,
Calendar.DATE);
Date theDate2 = org.apache.commons.lang3.time.DateUtils.truncate(date2,
Calendar.DATE);
return
theDate1.after(theDate2);
}
/**
* 判断date1是否在date2之前,忽略时间部分
*
* @param date1
* @param date2
* @return
*/
public
static
boolean
isDateBefore(Date date1, Date date2) {
return
isDateAfter(date2, date1);
}
/**
* 判断time1是否在time2之后,忽略日期部分
*
* @param time1
* @param time2
* @return
*/
public
static
boolean
isTimeAfter(Date time1, Date time2) {
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(time1);
calendar1.set(
1900
,
1
,
1
);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(time2);
calendar2.set(
1900
,
1
,
1
);
return
calendar1.after(calendar2);
}
/**
* 判断time1是否在time2之前,忽略日期部分
*
* @param time1
* @param time2
* @return
*/
public
static
boolean
isTimeBefore(Date time1, Date time2) {
return
isTimeAfter(time2, time1);
}
/**
* 判断两个日期是否同一天(忽略时间部分)
*
* @param date1
* @param date2
* @return
*/
public
static
boolean
isSameDay(Date date1, Date date2) {
return
org.apache.commons.lang3.time.DateUtils.isSameDay(date1, date2);
}
/**
* 判断两个日历天是否同一天(忽略时间部分)
*
* @param date1
* @param date2
* @return
*/
public
static
boolean
isSameDay(Calendar date1, Calendar date2) {
return
org.apache.commons.lang3.time.DateUtils.isSameDay(date1, date2);
}
/**
* 将字符串形式的日期表示解析为日期对象
*
* @param dateString
* @return
*/
public
static
Date parseDate(String dateString) {
try
{
return
org.apache.commons.lang3.time.DateUtils.parseDate(
dateString,
new
String[] {
"yyyy-MM-dd"
,
"yyyy-M-d"
,
"yyyy-MM-d"
,
"yyyy-M-dd"
});
}
catch
(ParseException e) {
return
null
;
}
}
/**
* 将字符串形式的时间表示解析为日期时间对象
*
* @param timeString
* @return
*/
public
static
Date parseTime(String timeString) {
try
{
return
org.apache.commons.lang3.time.DateUtils.parseDate(
timeString,
new
String[] {
"hh:mm:ss"
,
"h:m:s"
,
"hh:mm"
,
"h:m"
});
}
catch
(ParseException e) {
return
null
;
}
}
/**
* 将字符串形式的日期时间表示解析为时间对象
*
* @param timeString
* @return
*/
public
static
Date parseDateTime(String timeString) {
try
{
return
org.apache.commons.lang3.time.DateUtils.parseDate(
timeString,
new
String[] {
"yyyy-MM-dd HH:mm:ss"
,
"yyyy-M-d H:m:s"
,
"yyyy-MM-dd H:m:s"
,
"yyyy-M-d HH:mm:ss"
});
}
catch
(ParseException e) {
return
null
;
}
}
/**
* 计算两个日期之间包含的星期X的天数。
*
* @param fromDate
* 起始日期
* @param toDate
* 结束日期
* @param dayOfWeek
* 星期,例如星期三,星期四
* @return
*/
public
static
int
getWeekDaysBetween(Date fromDate, Date toDate,
int
dayOfWeek) {
int
result =
0
;
Date firstDate = getFirstWeekdayBetween(fromDate, toDate, dayOfWeek);
if
(firstDate ==
null
) {
return
0
;
}
Calendar aDay = Calendar.getInstance();
aDay.setTime(firstDate);
while
(aDay.getTime().before(toDate)) {
result++;
aDay.add(Calendar.DATE, DAYS_IN_A_WEEK);
}
return
result;
}
/**
* 获取在两个日期之间的第一个星期X
*
* @param fromDate
* 起始日期
* @param toDate
* 结束日期
* @param dayOfWeek
* 星期,例如星期三,星期四
* @return
*/
public
static
Date getFirstWeekdayBetween(Date fromDate, Date toDate,
int
dayOfWeek) {
Calendar aDay = Calendar.getInstance();
aDay.setTime(fromDate);
while
(aDay.getTime().before(toDate)) {
if
(aDay.get(Calendar.DAY_OF_WEEK) == dayOfWeek) {
return
aDay.getTime();
}
aDay.add(Calendar.DATE,
1
);
}
return
null
;
}
/**
* 取得参数year指定的年份的总天数
*
* @param year
* @return
*/
public
static
int
getDaysInYear(
int
year) {
Calendar aDay = Calendar.getInstance();
aDay.set(year,
1
,
1
);
Date from = aDay.getTime();
aDay.set(year +
1
,
1
,
1
);
Date to = aDay.getTime();
return
getDayDiff(from, to);
}
/**
* 取得指定年月的总天数
*
* @param year
* @param month
* @return
*/
public
static
int
getDaysInMonth(
int
year,
int
month) {
Calendar aDay = Calendar.getInstance();
aDay.set(year, month,
1
);
Date from = aDay.getTime();
if
(month == Calendar.DECEMBER) {
aDay.set(year +
1
, Calendar.JANUARY,
1
);
}
else
{
aDay.set(year, month +
1
,
1
);
}
Date to = aDay.getTime();
return
getDayDiff(from, to);
}
/**
* 获得指定日期的年份
*
* @param date
* @return
*/
public
static
int
getYear(Date date) {
return
getFieldValue(date, Calendar.YEAR);
}
/**
* 获得指定日期的月份
*
* @param date
* @return
*/
public
static
int
getMonth(Date date) {
return
getFieldValue(date, Calendar.MONTH) +
1
;
}
/**
* 获得指定日期是当年的第几天
*
* @param date
* @return
*/
public
static
int
getDayOfYear(Date date) {
return
getFieldValue(date, Calendar.DAY_OF_YEAR);
}
/**
* 获得指定日期是当月的第几天
*
* @param date
* @return
*/
public
static
int
getDayOfMonth(Date date) {
return
getFieldValue(date, Calendar.DAY_OF_MONTH);
}
/**
* 获得指定日期是当周的第几天
*
* @param date
* @return
*/
public
static
int
getDayOfWeek(Date date) {
return
getFieldValue(date, Calendar.DAY_OF_WEEK);
}
private
static
int
getFieldValue(Date date,
int
field) {
if
(date ==
null
) {
throw
new
InvalidParameterException(
"date cannot be null!"
);
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return
calendar.get(field);
}
/**
* 获得指定日期之后一段时期的日期。例如某日期之后3天的日期等。
* @param origDate 基准日期
* @param amount 时间数量
* @param timeUnit 时间单位,如年、月、日等。用Calendar中的常量代表
* @return
*/
public
static
final
Date dateAfter(Date origDate,
int
amount,
int
timeUnit) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(origDate);
calendar.add(timeUnit, amount);
return
calendar.getTime();
}
/**
* 获得指定日期之前一段时期的日期。例如某日期之前3天的日期等。
* @param origDate 基准日期
* @param amount 时间数量
* @param timeUnit 时间单位,如年、月、日等。用Calendar中的常量代表
* @return
*/
public
static
final
Date dateBefore(Date origDate,
int
amount,
int
timeUnit) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(origDate);
calendar.add(timeUnit, -amount);
return
calendar.getTime();
}
}
0 0
- java时间工具类
- java 时间工具类
- Java时间工具类
- Java时间工具类
- 时间工具类--java
- Java时间工具类
- java 时间工具类
- java 时间类 工具
- Java时间工具类
- 时间工具类java
- Java时间工具类
- JAVA 时间工具类
- #.java 时间工具类
- java 时间工具类
- [Java]时间工具类
- JAVA时间处理工具类
- java时间处理工具类
- java日期时间工具类
- WebView与js的交互
- 打印日历(java)
- (四)洞悉linux下的Netfilter&iptables:包过滤子系统iptable_filter
- 解决问题: The message received from the server could not be parsed
- Linux进程间通信——信号量
- 时间工具类--java
- IO篇
- 单词选择
- Android入门:隐式Intent
- 多事务下争抢资源
- Ryzom服务架构
- GDB详解
- camera调试光源介绍
- 分钢结构款付过款