在现在的项目中,我们常常需要处理日期, java.util.Calendar 时间,就知道它使用起来有多麻烦了。于是就百度了一下,看看有什么好一点的时间工具。因此当我找到 Joda-Time 这个时间工具。
查看了一下joda,发现joda对时间的计算处理能力是很强的,可以使我们在平时的时间计算上,简单化。
引入joda工具包
<
dependency
>
<
groupId
>joda-time</
groupId
>
<
artifactId
>joda-time</
artifactId
>
<
version
>2.9.9</
version
>
</
dependency
>
下面是我对joda工具的一些简单研究使用
package
org.lantu.utils.time;
import
org.joda.time.*;
import
org.lantu.utils.string.StringUtil;
import
java.util.Date;
/**
* Created by runshu.lin on 2018/5/1.
*/
public
class
JodaTimeUtil {
private
JodaTimeUtil() {
}
static
{
DateTimeZone.setDefault(DateTimeZone.forID(
"Asia/Shanghai"
));
}
private
static
final
String defaultFormat =
"yyyy-MM-dd HH:mm:ss"
;
/**
* 获取当前系统的时间(毫秒级)
* @return
*/
public
static
long
getCurrentSecondMillis() {
return
DateTimeUtils.currentTimeMillis();
}
/**
* 获取当天的开始时间
* @return
*/
public
static
long
getStartOfDay() {
return
getStartOfDay(
new
Date());
}
/**
* 获取某天的开始时间
* @param date
* @return
*/
public
static
long
getStartOfDay(Date date) {
DateTime dateTime =
new
DateTime(date);
DateTime startOfDay = dateTime.withTimeAtStartOfDay();
return
startOfDay.getMillis();
}
/**
* 获取当天的结束时间
* @return
*/
public
static
long
getEndOfDay() {
return
getEndOfDay(
new
Date());
}
/**
* 获取某天的结束时间
* @param date
* @return
*/
public
static
long
getEndOfDay(Date date) {
DateTime dateTime =
new
DateTime(date);
DateTime endOfDay = dateTime.millisOfDay().withMaximumValue();
return
endOfDay.getMillis();
}
/**
* 获取现在距离今天结束还有多长时间
* @return
*/
public
static
long
endOfToday() {
DateTime nowTime =
new
DateTime();
DateTime endOfDay = nowTime.millisOfDay().withMaximumValue();
return
endOfDay.getMillis() - nowTime.getMillis();
}
/**
* 计算两个日期的相隔天数
* @param startTime
* @param endTime
* @return
*/
public
static
int
getBetweenDay(
long
startTime,
long
endTime) {
DateTime startDay =
new
DateTime(startTime);
DateTime endDay =
new
DateTime(endTime);
return
Days.daysBetween(startDay, endDay).getDays();
}
/**
* 对比两个时间是否同一天
* @param startTime
* @param endTime
* @return
*/
public
static
boolean
isEqualsSameDay(
long
startTime,
long
endTime) {
DateTime startDay =
new
DateTime(startTime);
DateTime endDay =
new
DateTime(endTime);
Period p =
new
Period(startDay, endDay, PeriodType.days());
int
days = p.getDays();
return
days ==
0
;
}
/**
* 生成指定的时间
* @param year 年
* @param month 月
* @param day 日
* @param hour 时
* @param min 分
* @param sec 秒
* @param msec 毫秒
* @return
*/
public
static
Date generateDate(
int
year,
int
month,
int
day,
int
hour,
int
min,
int
sec,
int
msec) {
DateTime dt =
new
DateTime(year, month, day, hour, min, sec, msec);
return
dt.toDate();
}
public
static
Date generateDate(
int
year,
int
month,
int
day,
int
hour,
int
min,
int
sec) {
DateTime dt =
new
DateTime(year, month, day, hour, min, sec);
return
dt.toDate();
}
public
static
Date generateDate(
int
year,
int
month,
int
day) {
LocalDate localDate =
new
LocalDate(year, month, day);
return
localDate.toDate();
}
public
static
Date generateDateTime(
int
hour,
int
min,
int
sec,
int
msec) {
LocalTime localTime =
new
LocalTime(hour, min, sec, msec);
return
localTime.toDateTimeToday().toDate();
}
public
static
Date generateDateTime(
int
hour,
int
min,
int
sec) {
LocalTime localTime =
new
LocalTime(hour, min, sec);
return
localTime.toDateTimeToday().toDate();
}
/**
* 格式化日期,转化为string
* @param date
* @param format
* @return
*/
public
static
String formatDateToString(Date date, String format) {
if
(StringUtil.isEmpty(format)) format = defaultFormat;
DateTime dt =
new
DateTime(date);
return
dt.toString(format);
}
public
static
String formatDateToString(
long
time, String format) {
if
(StringUtil.isEmpty(format)) format = defaultFormat;
DateTime dt =
new
DateTime(time);
return
dt.toString(format);
}
/**
* 格式化日期,转化为string(默认为:yyyy-MM-dd HH:mm:ss)
* @param date
* @return
*/
public
static
String formatDateToString(Date date) {
return
formatDateToString(date, defaultFormat);
}
public
static
String formatDateToString(
long
time) {
return
formatDateToString(time, defaultFormat);
}
}