public class DateUtils {
public static String DATE_FORMATTER = "yyyy-MM-dd";
public final static String DATE_HOUR_FORMATTER = "yyyy-MM-dd HH";
public final static String DATE_HOUR_MINUTE_FORMATTER = "yyyy-MM-dd HH:mm";
public final static String DATE_HOUR_MINUTE_SECOND_FORMATTER = "yyyy-MM-dd HH:mm:ss";
public final static String YEAR_FORMATTER = "yyyy";
public final static String MONTH_FORMATTER = "MM";
public final static String DAY_FORMATTER = "dd";
public final static String HOUR_FORMATTER = "HH";
public final static String HOUR_MINUTE_FORMATTER = "HH:mm";
public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(DATE_FORMATTER);
private static final DateTimeFormatter DATE_TIME_HOUR_TIME_FORMATTER = DateTimeFormatter.ofPattern(DATE_HOUR_MINUTE_SECOND_FORMATTER);
private static final LocalDateTime NOW_TIME = LocalDateTime.now();
/**
* 获取系统本地日期
**/
public static String getLocalDateNow() {
return LocalDate.now().format(DATE_TIME_FORMATTER);
}
/**
* 获取LocalDateTime
**/
public static LocalDateTime getLocalDateTime() {
return LocalDateTime.now();
}
/**
* 获取指定时区LocalDateTime
**/
public static LocalDateTime getLocalDateTime(ZoneId zon) {
return LocalDateTime.now(zon);
}
/**
* 获取系统本地日期,指定时区
**/
public static String getLocalDateNow(ZoneId zon) {
LocalDateTime now = LocalDateTime.now(zon);
return now.format(DATE_TIME_FORMATTER);
}
/**
* 获取系统本地时间
**/
public static String getLocalTimeNow() {
return LocalDateTime.now().format(DATE_TIME_HOUR_TIME_FORMATTER);
}
/**
* 获取系统本地时间,指定时区
**/
public static String getLocalTimeNow(ZoneId zon) {
return LocalDateTime.now(zon).format(DATE_TIME_HOUR_TIME_FORMATTER);
}
/**
* 获取年份
**/
public static int getLocalDateYear() {
return LocalDate.now().getYear();
}
/**
* 获取年份,指定时区
**/
public static int getLocalDateYear(ZoneId zon) {
return LocalDate.now(zon).getYear();
}
/**
* 获取月份
**/
public static String getLocalDateMonth() {
return String.format("%02d", LocalDate.now().getMonthValue());
}
/**
* 获取月份,指定时区
**/
public static String getLocalDateMonth(ZoneId zon) {
return String.format("%02d", LocalDate.now(zon).getMonthValue());
}
/**
* 获取月份中的天
**/
public static String getLocalDateDayOfMonth() {
return String.format("%02d", LocalDate.now().getDayOfMonth());
}
/**
* 获取月份中的天,指定时区
**/
public static String getLocalDateDayOfMonth(ZoneId zon) {
return String.format("%02d", LocalDate.now(zon).getDayOfMonth());
}
/**
* 获取小时
**/
public static int getLocalTimeHour() {
return LocalDateTime.now().getHour();
}
/**
* 获取小时,指定时区
**/
public static int getLocalTimeHour(ZoneId zon) {
return LocalDateTime.now(zon).getHour();
}
/**
* 根据年份,天数获取日期
**/
public static String getLocalDate(int year, int dayOfYear) {
return LocalDate.ofYearDay(year, dayOfYear).format(DATE_TIME_FORMATTER);
}
/**
* LocalDateTime获取UTC时间,参数增加秒数
**/
public static String getUTCTimeStr(int seconds) {
LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
LocalDateTime nowAddSeconds = now.plusSeconds(seconds);
return nowAddSeconds.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
/**
* LocalDateTime获取UTC时间DOY
**/
public static int getUTCTimeDOY() {
LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
return now.getDayOfYear();
}
/**
* LocalDateTime获取UTC时间DOY,增加秒参数
**/
public static int getUTCTimeDOY(long seconds) {
LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
LocalDateTime nowAddSeconds = now.plusSeconds(seconds);
return nowAddSeconds.getDayOfYear();
}
/**
* 获取UTC时间年份
**/
public static int getUTCTimeYear(long seconds) {
LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
LocalDateTime nowAddSeconds = now.plusSeconds(seconds);
return nowAddSeconds.getYear();
}
/**
* 获取系统本地时间-小时,不可变的日期时间(启动只获取一次最新时间)
**/
public static int getLocalHourNow() {
return NOW_TIME.get(ChronoField.HOUR_OF_DAY);
}
/**
* 获取当前日期时间 格式: yyyy-MM-dd
*/
public static String getCurrentDate() {
DateFormat formatter = new SimpleDateFormat(DATE_FORMATTER);
return formatter.format(new Date());
}
/**
* 获取当前日期时间 格式: yyyy-MM-dd HH:mm:ss
*/
public static Date getDateTime(String time) {
try {
DateFormat format1 = new SimpleDateFormat(DATE_HOUR_MINUTE_SECOND_FORMATTER);
return format1.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 格式化指定日期 格式:参数 例如 yyyy-MM-dd
*/
public static String getDate(Date date, String formatStr) {
SimpleDateFormat format = new SimpleDateFormat(StringUtil.notNull(formatStr, DATE_HOUR_MINUTE_SECOND_FORMATTER));
return date == null ? "" : format.format(date);
}
public static String getDate(long milliSecond) {
Date date = new Date();
date.setTime(milliSecond);
return new SimpleDateFormat().format(date);
}
/**
* 显示当前时间与目标时间的距离
* <p>
* **秒前 ** 分钟前 ** 小时前 超过7天显示时间
*/
public static String distance(Date ctime, String format) {
if (ctime == null) {
return "";
}
format = com.cnten.commons.StringUtil.notNull(format, "yyyy-MM-dd HH:mm");
long result = Math.abs(System.currentTimeMillis() - ctime.getTime());
if (result < 60000) {
return (result / 1000) + "秒钟前";
} else if (result < 3600000) {
return (result / 60000) + "分钟前";
} else if (result < 86400000) {
return (result / 3600000) + "小时前";
} else if (result < 86400000 * 7) {
return (result / 86400000) + "天前";
} else {
return getDate(ctime, format);
}
}
/**
* 当前时间之前的时间与当前时间相差多少秒
*
* @param startDate 当前时间之前的时间
*/
public static int intervalSecond(Date startDate) {
long nowDate = System.currentTimeMillis();
long startDateTime = startDate.getTime();
return (int) ((nowDate - startDateTime) / 1000);
}
/**
* 计算时间间隔,单位:毫秒
**/
public static long intervalSecond(Date startDate, Date endDate) {
long startDateTime = startDate.getTime();
long endDateTime = endDate.getTime();
return endDateTime - startDateTime;
}
public static String getDate() {
Calendar ca = Calendar.getInstance();
ca.setTime(new Date());
return getDate(ca.getTime(), YEAR_FORMATTER);
}
/**
* 根据年份、天数获取日期
**/
public static String getDate(int year, int dayOfYear) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.DAY_OF_YEAR, dayOfYear);
return getDate(calendar.getTime(), DATE_FORMATTER);
}
public static String getDateYear() {
Calendar ca = Calendar.getInstance();
ca.setTime(new Date());
return getDate(ca.getTime(), YEAR_FORMATTER);
}
public static String getDateMonth() {
Calendar ca = Calendar.getInstance();
ca.setTime(new Date());
return getDate(ca.getTime(), MONTH_FORMATTER);
}
public static String getDateDay() {
Calendar ca = Calendar.getInstance();
ca.setTime(new Date());
return getDate(ca.getTime(), DAY_FORMATTER);
}
public static String getDateHour() {
Calendar ca = Calendar.getInstance();
ca.setTime(new Date());
return getDate(ca.getTime(), HOUR_FORMATTER);
}
/**
* 获取去年日期
**/
public static String getDateYesteryear() {
Calendar ca = Calendar.getInstance();
ca.setTime(new Date());
//年份减1
ca.add(Calendar.YEAR, -1);
return getDate(ca.getTime(), DATE_FORMATTER);
}
/**
* 获取上个月日期
**/
public static String getDateLastMonth() {
Calendar ca = Calendar.getInstance();
ca.setTime(new Date());
ca.add(Calendar.MONTH, -1);
return getDate(ca.getTime(), DATE_FORMATTER);
}
/**
* 获取昨天日期
**/
public static String getDateYesterday() {
Calendar ca = Calendar.getInstance();
ca.setTime(new Date());
ca.add(Calendar.DATE, -1);
return getDate(ca.getTime(), DATE_FORMATTER);
}
/**
* 获取年积日,当前年的第几天
**/
public static int getDateDOY() {
final Date date = new Date();
final Calendar ca = Calendar.getInstance();
ca.setTime(date);
return ca.get(Calendar.DAY_OF_YEAR);
}
/**
* 获取UTC时间
**/
public static String getUTCTimeStrByOffset() {
StringBuffer UTCTimeBuffer = new StringBuffer();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
// 1、取得本地时间:
Calendar cal = Calendar.getInstance();
// 2、取得时间偏移量:
int zoneOffset = cal.get(Calendar.ZONE_OFFSET);
// 3、取得夏令时差:
int dstOffset = cal.get(Calendar.DST_OFFSET);
// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
cal.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
UTCTimeBuffer.append(year).append("-").append(month).append("-").append(day);
UTCTimeBuffer.append(" ").append(hour).append(":").append(minute);
try {
format.parse(UTCTimeBuffer.toString());
return UTCTimeBuffer.toString();
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* UTC时间转换成东八区时间
**/
public static String getLocalTimeFromUTC(String UTCTime) {
Date UTCDate = null;
String localTimeStr = null;
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
UTCDate = format.parse(UTCTime);
format.setTimeZone(TimeZone.getTimeZone("GMT-8"));
localTimeStr = format.format(UTCDate);
} catch (ParseException e) {
e.printStackTrace();
}
return localTimeStr;
}
/**
* 判断日期是否相等
**/
public static boolean isEqualsDate(String beforeDate, String afterDate) {
return StringUtils.equals(beforeDate, beforeDate);
}
/**
* 获取年+年纪日
* 例2022199
* @return 结果集
*/
public static String yyyyDOY(){
int dayOfYear = DateUtil.date().dayOfYear();
int year = DateUtil.date().year();
String doy = String.format("%03d", dayOfYear);
return year + doy;
}
/**
* 获取年纪日
* 例199
* @return 结果集
*/
public static String doy(){
int dayOfYear = DateUtil.date().dayOfYear();
return String.format("%03d", dayOfYear);
}
public static String utcDoy(){
LocalDateTime utcNow = DateUtils.getLocalDateTime(ZoneOffset.UTC);
int dayOfYear = utcNow.getDayOfYear();
return String.format("%03d", dayOfYear);
}
public static String doy(int offset){
int dayOfYear = DateUtil.date().dayOfYear();
return String.format("%03d", dayOfYear + offset);
}
/**
* 获取年+年纪日
* 例2022199
* @return 结果集
*/
public static String yyyyDOY(DateTime dateTime){
int dayOfYear = dateTime.dayOfYear();
int year = dateTime.year();
String doy = String.format("%03d", dayOfYear);
return year + doy;
}
}
日期工具类DateUtils
最新推荐文章于 2024-05-10 02:11:19 发布