DateTime API作为java8的新增功能,为我们在java中进行日期时间的处理增添了许多的方便性
1. Date
对于日期类操作,提供了LocalDate。以 yyyy-MM-dd 的默认格式表示日期。可以使用 now() 方法来获取当前日期。可以提供年、月和日期的输入参数来创建 LocalDate 实例。
2. Time
对于时间类操作,提供了LocalTime。默认格式是 hh:mm:ss.zzz。和 LocalDate 一样。通过传递小时、分钟和秒作为输入参数来提供时区支持和创建实例。
3. DateTime
LocalDateTime 可以用来表示日期时间。默认格式为 yyyy-MM-dd-HH-mm-ss.zzz 的日期时间。提供了一个工厂方法,采用 LocalDate 和 LocalTime 输入参数来创建 LocalDateTime 实例。
4. DateUtil
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneOffset;
import java.time.temporal.ChronoUnit;
public class DateUtil {
// -------------------------------localDate操作-------------------------------
/**
* startDate和当前的时间差
*
* @param startDate String类型,支持‘yyyy-MM-dd’格式
* @return
*/
public static long dateDiff(String startDate) {
return dateDiff(LocalDate.parse(startDate));
}
/**
* startDate和当前的时间差
*
* @param startDate
* @return
*/
public static long dateDiff(LocalDate startDate) {
return LocalDate.now().toEpochDay() - startDate.toEpochDay();
}
/**
* 判断给定的日期是否是当天
*
* @param date String类型,支持‘yyyy-MM-dd’格式
* @return
*/
public static boolean isToday(String date) {
return LocalDate.now().equals(LocalDate.parse(date));
}
/**
* 判断给定的日期是否是当天
*
* @param date
* @return
*/
public static boolean isToday(LocalDate date) {
return LocalDate.now().equals(date);
}
/**
* 在startDate的基础上增加interval天
*
* @param startDate
* @param interval
* @return
*/
public static LocalDate dateAdd(LocalDate startDate, int interval) {
return startDate.plus(interval, ChronoUnit.DAYS);
}
/**
* 在当前日期的基础上增加interval天
*
* @param interval
* @return
*/
public static LocalDate dateAdd(int interval) {
return LocalDate.now().plus(interval, ChronoUnit.DAYS);
}
/**
* 在startDate的基础上减少interval天
*
* @param startDate
* @param interval
* @return
*/
public static LocalDate dateSub(LocalDate startDate, int interval) {
return startDate.minus(interval, ChronoUnit.DAYS);
}
/**
* 在当前日期的基础上减少interval天
*
* @param interval
* @return
*/
public static LocalDate dateSub(int interval) {
return LocalDate.now().minus(interval, ChronoUnit.DAYS);
}
/**
* 获取当前年份
*
* @return
*/
public static int getYear() {
return LocalDate.now().getYear();
}
/**
* 获取当前月份
*
* @return
*/
public static int getMonth() {
return LocalDate.now().getMonth().getValue();
}
/**
* 获取当前是一年中的第几天
*
* @return
*/
public static int getDayOfYear() {
return LocalDate.now().getDayOfYear();
}
/**
* 获取当前是当月中的第几天
*
* @return
*/
public static int getDayOfMonth() {
return LocalDate.now().getDayOfMonth();
}
/**
* 获取当前是本周中的第几天
*
* @return
*/
public static int getDayOfWeek() {
return LocalDate.now().getDayOfWeek().getValue();
}
/**
* 返回今年是否是闰年
* 闰年:
*
* @return
*/
public static boolean isLeapYear() {
return LocalDate.now().isLeapYear();
}
/**
* 获取当月一共有几天
*
* @return
*/
public static int lengthOfMonth() {
return LocalDate.now().lengthOfMonth();
}
/**
* 获取本年一共有几天
*
* @return
*/
public static int lengthOfYear() {
return LocalDate.now().lengthOfYear();
}
// -------------------------------localTime操作-------------------------------
/**
* 在当前时间的基础上增加hour小时,minutes分钟和seconds秒
*
* @param hour
* @param minutes
* @param seconds
* @return
*/
public static LocalTime timeAnd(int hour, int minutes, int seconds) {
return LocalTime.now()
.plus(hour, ChronoUnit.HOURS)
.plus(minutes, ChronoUnit.MINUTES)
.plus(seconds, ChronoUnit.SECONDS);
}
/**
* 在当前时间的基础上减少hour小时,minutes分钟和seconds秒
*
* @param hour
* @param minutes
* @param seconds
* @return
*/
public static LocalTime timeSub(int hour, int minutes, int seconds) {
return LocalTime.now()
.minus(hour, ChronoUnit.HOURS)
.minus(minutes, ChronoUnit.MINUTES)
.minus(seconds, ChronoUnit.SECONDS);
}
/**
* 生成一个指定hour小时,minutes分钟和seconds秒的LocalTime
*
* @param hour
* @param minutes
* @param seconds
* @return
*/
public static LocalTime makeTime(int hour, int minutes, int seconds) {
return LocalTime.now().withHour(hour).withMinute(minutes).withSecond(seconds);
}
// ---------------localDateTime和UnixStamp操作-------------------------------
/**
* 将localDateTime转为秒级时间戳
*
* @param localDateTime
* @return
*/
public long toUnixStamp(LocalDateTime localDateTime) {
return localDateTime.toEpochSecond(ZoneOffset.of("+8"));
}
/**
* 将localDate转为秒级时间戳
* 默认是0时0分0秒
*
* @param localDate
* @return
*/
public long toUnixStamp(LocalDate localDate) {
LocalTime localTime = LocalTime.now().withHour(0).withMinute(0).withSecond(0);
return toUnixStamp(LocalDateTime.of(localDate, localTime));
}
/**
* 判断给定的时间戳是否是当天
*
* @param dataUnixStamp
* @return
*/
public static boolean isToday(long dataUnixStamp) {
return LocalDate.now().equals(fromUnixStamp(dataUnixStamp).toLocalDate());
}
/**
* 将时间戳转为LocalDateTime格式
*
* @param unixStamp
* @return
*/
public static LocalDateTime fromUnixStamp(long unixStamp) {
return LocalDateTime.ofEpochSecond(unixStamp, 0, ZoneOffset.of("+8"));
}
}