/*
* Copyright 2021 Wicrenet, Inc. All rights reserved.
*/
package com.hq.cloud.utils;
import com.hq.cloud.verify.Asserts;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* JodaTime 时间工具
*
* @author yangjunxiong
* @date 2021/1/5 09:18
*/
public final class JodaTimeUtils {
private static final Logger logger = LoggerFactory.getLogger(JodaTimeUtils.class);
private static String[] patterns = new String[]{"yyyy-MM-dd'T'HH:mm:ss.sss", "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss"};
private JodaTimeUtils() {
}
//Date To java.time.LocalDateTime
static public java.time.LocalDateTime tojtLocalDateTime(Date date) {
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(date);
ZonedDateTime zdt = cal.toZonedDateTime();
return zdt.toLocalDateTime();
}
//java.time.LocalDateTime To Date
static public Date toDate(java.time.LocalDateTime ldt) {
ZonedDateTime zdt = ZonedDateTime.of(ldt, ZoneId.systemDefault());
GregorianCalendar cal = GregorianCalendar.from(zdt);
return cal.getTime();
}
/**
* 根据当天日期,获取当天的时间临界点时间
*
* @param localDate
* @return
*/
public static ImmutablePair<LocalDateTime, LocalDateTime> criticalTimeDay(LocalDate localDate) {
Asserts.notNull(localDate);
LocalDateTime beginTime = new LocalDateTime(localDate.getYear(), localDate.getMonthOfYear(), localDate.getDayOfMonth(), 0, 0, 0, 0);
LocalDateTime endTime = new LocalDateTime(localDate.getYear(), localDate.getMonthOfYear(), localDate.getDayOfMonth(), 23, 59, 59, 0);
return ImmutablePair.of(beginTime, endTime);
}
/**
* 根据当天日期,获取当月的时间临界点时间
*
* @param LocalDateTime
* @return
*/
public static ImmutablePair<LocalDateTime, LocalDateTime> criticalTimeMonth(LocalDateTime LocalDateTime) {
Asserts.notNull(LocalDateTime);
java.time.LocalDateTime localDateTime = JodaTimeUtils.tojtLocalDateTime(LocalDateTime.toDate());
org.joda.time.LocalDateTime beginTime = JodaTimeUtils.minTime(new LocalDate(JodaTimeUtils.toDateIsString(localDateTime.with(TemporalAdjusters.firstDayOfMonth()).toString())));
org.joda.time.LocalDateTime endTime = JodaTimeUtils.maxTime(new LocalDate(JodaTimeUtils.toDateIsString(localDateTime.with(TemporalAdjusters.lastDayOfMonth()).toString())));
return ImmutablePair.of(beginTime, endTime);
}
/**
* 获取当天的最小值
*
* @param localDate
* @return
*/
public static LocalDateTime minTime(LocalDate localDate) {
Asserts.notNull(localDate);
return new LocalDateTime(localDate.getYear(), localDate.getMonthOfYear(), localDate.getDayOfMonth(), 0, 0, 0, 0);
}
/**
* 获取当天的最大值
*
* @param localDate
* @return
*/
public static LocalDateTime maxTime(LocalDate localDate) {
Asserts.notNull(localDate);
return new LocalDateTime(localDate.getYear(), localDate.getMonthOfYear(), localDate.getDayOfMonth(), 23, 59, 59, 999);
}
/*
* 【 获取时间段内的所有日期 】
*
* @author YJX
* @date 2021/1/5 09:18
* @param startTime
* @param endTime
* @return java.util.ArrayList<org.joda.time.LocalDate>
**/
public static ArrayList<LocalDate> getLocalDates(LocalDate startTime, LocalDate endTime) {
ArrayList<LocalDate> localDates = new ArrayList<>();
do {
localDates.add(startTime);
startTime = startTime.plusDays(1);
} while (endTime.toDate().getTime() > startTime.toDate().getTime());
return localDates;
}
/*
* 【 获取时间段内的所有日期 】
*
* @author YJX
* @date 2021/1/5 09:18
* @param startTime
* @param endTime
* @return java.util.ArrayList<org.joda.time.LocalDate>
**/
public static ArrayList<LocalDate> getLocalDates(Date startTime, Date endTime) {
LocalDate tradeDate = new LocalDate(startTime);
ArrayList<LocalDate> localDates = new ArrayList<>();
do {
localDates.add(tradeDate);
tradeDate = tradeDate.plusDays(1);
} while (endTime.getTime() > tradeDate.toDate().getTime());
return localDates;
}
/**
* 【 String字符串转Date格式 】
*
* @param dateString 需要转换的时间字段串(可以是时间戳或者patterns的类型)
* @param dateFormat 传的是时间字符串 不传默认解析:"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm"
* @return java.util.Date
* @author yangjunxiong
* @date 2021/1/5 09:18
**/
public static Date toDateIsString(String dateString, String... dateFormat) {
if (StringUtils.isBlank(dateString)) {
return null;
}
try {
//执行自定义的格式转换
if (dateFormat.length > 0) {
return DateUtils.parseDate(dateString, dateFormat);
}
return DateUtils.parseDate(dateString, patterns);
} catch (ParseException e) {
logger.error("字符串时间格式化出错:{}", dateString);
return null;
}
}
/**
* 【 时间戳 】
*
* @param dateString
* @return java.util.Date
* @author yangjunxiong
* @date 2021/6/11 17:25
**/
public static Date toDateIsNumeric(String dateString) {
if (StringUtils.isBlank(dateString)) {
return null;
}
try {
//如果传的是时间戳
if (StringUtils.isNumeric(dateString)) {
return new Date(Long.parseLong(dateString));
}
} catch (NumberFormatException e) {
logger.error("字符串时间格式化出错:{}", dateString);
return null;
}
return null;
}
/**
* 获取本年的最后一天
*
* @return String
**/
public static Date getYearEnd() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, calendar.getActualMaximum(Calendar.MONTH));
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date currYearLast = calendar.getTime();
return toDateIsString(new SimpleDateFormat("yyyy-MM-dd").format(currYearLast) + " 23:59:59", "yyyy-MM-dd HH:mm:ss");
}
public static Date[] getMonthformartDate(String dateTime) {
Date[] formartDate = new Date[2];
if (StringUtils.isNotBlank(dateTime)) {
formartDate[0] = toDateIsString(dateTime, "YYYY-MM");
formartDate[1] = LocalDate.fromDateFields(formartDate[0]).plusMonths(1).toDate();
} else {
formartDate[0] = LocalDate.now().plusMonths(-1).toDate();
formartDate[1] = new Date();
}
return formartDate;
}
/**
* @param date 日期
* @return 获取指定日期的最后时分秒
*/
public static Date getLastDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// 将时分秒,毫秒域清零
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* 根据时间获取具体日期
*
* @param now
* @return
*/
public static Date getBeforeDate(Date now, int count) {
Calendar c = Calendar.getInstance();
c.setTime(now);
c.set(Calendar.HOUR_OF_DAY, 00);
c.set(Calendar.MINUTE, 00);
c.set(Calendar.SECOND, 00);
c.set(Calendar.MILLISECOND, 000);
c.add(Calendar.MONTH, count);
return c.getTime();
}
/**
* 根据时间和间隔获取时间范围
*
* @param now
* @return
*/
public static Date[] getBeforeDate(Date now, int startCount, int endCount) {
Date[] dates = new Date[2];
Calendar c = Calendar.getInstance();
c.setTime(now);
c.set(Calendar.HOUR_OF_DAY, 00);
c.set(Calendar.MINUTE, 00);
c.set(Calendar.SECOND, 00);
c.set(Calendar.MILLISECOND, 000);
c.add(Calendar.MONTH, startCount);
dates[0] = c.getTime();
Calendar c2 = Calendar.getInstance();
c2.setTime(now);
c2.set(Calendar.HOUR_OF_DAY, 23);
c2.set(Calendar.MINUTE, 23);
c2.set(Calendar.SECOND, 59);
c2.set(Calendar.MILLISECOND, 999);
c2.add(Calendar.MONTH, endCount);
dates[1] = c2.getTime();
return dates;
}
/**
* 获得下个月1号零时零分零秒
*
* @return
*/
public static String initDateByMonth() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.add(Calendar.MONTH, 1);
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = String.valueOf(simpleDate.format(calendar.getTime()));
return time;
}
}
JodaTimeUtils时间转换工具类 string或者long类型转Date格式等等
最新推荐文章于 2022-07-01 16:39:43 发布