一、日期转换运算
Java 中的日期常用转换
二、工具类
代码如下:
package com.common.utils.time;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.lang.management.ManagementFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
private static final int[] dayArr = new int[]{20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22};
private static final String[] constellationArr = new String[]{"摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座"};
public static final String PATTERN_FULL = "yyyy-MM-dd HH:mm:ss.SSS";
public static final String PATTERN_SHORT_FULL = "yyyyMMddHHmmssSSS";
public static final String PATTERN_DATETIME = "yyyy-MM-dd HH:mm:ss";
public static final String PATTERN_DATETIME_MINUTE = "yyyy-MM-dd HH:mm";
public static final String PATTERN_DATETIME_HOUR = "yyyy-MM-dd HH";
public static final String PATTERN_DATETIME_CN = "yyyy年MM月dd日HH时mm分ss秒";
public static final String PATTERN_SHORT_DATETIME = "yyyyMMddHHmmss";
public static final String PATTERN_DATE = "yyyy-MM-dd";
public static final String PATTERN_DATE_CN = "yyyy年MM月dd日";
public static final String PATTERN_SHORT_DATE = "yyyyMMdd";
public static final String PATTERN_TIME = "HH:mm:ss";
public static final String PATTERN_TIME_CN = "HH时mm分ss秒";
public static final String PATTERN_SHORT_TIME = "HHmmss";
public static final String PATTERN_YEAR = "yyyy";
public static final String PATTERN_SHORT = "yyyyMMdd";
private static String[] parsePatterns = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
public DateUtils() {
}
public static String formatFull(Date date) {
return format(date, "yyyy-MM-dd HH:mm:ss.SSS");
}
public static String formatDateTime(Date date) {
return format(date, "yyyy-MM-dd HH:mm:ss");
}
public static String formatDateTimeCN(Date date) {
return format(date, "yyyy年MM月dd日HH时mm分ss秒");
}
public static String formatShortDateTime(Date date) {
return format(date, "yyyyMMddHHmmss");
}
public static String formatDate(Date date) {
return format(date, "yyyy-MM-dd");
}
public static String formatYear(Date date) {
return format(date, PATTERN_YEAR);
}
public static String formatShort(Date date) {
return format(date, PATTERN_SHORT);
}
public static String formatDateCN(Date date) {
return format(date, "yyyy年MM月dd日");
}
public static String formatShortDate(Date date) {
return format(date, "yyyyMMdd");
}
public static String formatTime(Date date) {
return format(date, "HH:mm:ss");
}
public static String formatTimeCN(Date date) {
return format(date, "HH时mm分ss秒");
}
public static String formatShortTime(Date date) {
return format(date, "HHmmss");
}
public static String format(Date date, String pattern) {
SimpleDateFormat formatTime = new SimpleDateFormat(pattern);
return formatTime.format(date);
}
public static Date parseFull(String date) {
return parse(date, "yyyy-MM-dd HH:mm:ss.SSS");
}
public static Date parseShortFull(String date) {
return parse(date, "yyyyMMddHHmmssSSS");
}
public static Date parseDateTime(String date) {
return parse(date, "yyyy-MM-dd HH:mm:ss");
}
public static Date parseShortDateTime(String date) {
return parse(date, "yyyyMMddHHmmss");
}
public static Date parseDate(String date) {
return parse(date, "yyyy-MM-dd");
}
public static Date parseDate(Date date) {
String value = formatDate(date);
return parse(value, "yyyy-MM-dd");
}
public static Date parseShortDate(String date) {
return parse(date, "yyyyMMdd");
}
public static Date parseTime(String date) {
return parse(date, "HH:mm:ss");
}
public static String nowDateTime() {
return formatDateTime(new Date());
}
public static String nowDate() {
return formatDate(new Date());
}
public static String nowShortDate() {
return formatShortDate(new Date());
}
public static String nowTime() {
return formatTime(new Date());
}
public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static String nowShort() {
return format(new Date(), PATTERN_SHORT);
}
public static Date parse(String date, String pattern) {
SimpleDateFormat formatTime = new SimpleDateFormat(pattern);
try {
return formatTime.parse(date);
} catch (ParseException var4) {
throw new IllegalArgumentException("parse error.date:" + date + " pattern" + pattern);
}
}
public static String getSysYear() {
Calendar calendar = Calendar.getInstance();
return String.valueOf(calendar.get(Calendar.YEAR));
}
public static String getSysYearDetail() {
int year = LocalDateTime.now().getYear();
LocalDateTime localDateTime = LocalDateTime.of(year,12,31,23,59,59);
return localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
public static String getWeekOfDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
switch(calendar.get(7)) {
case 1:
return "周日";
case 2:
return "周一";
case 3:
return "周二";
case 4:
return "周三";
case 5:
return "周四";
case 6:
return "周五";
case 7:
return "周六";
default:
return "";
}
}
public static String getConstellation(int month, int day) {
return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month];
}
public static String getZodiac(int year) {
if (year < 1900) {
return "未知";
} else {
int start = 1900;
String[] zodiacs = new String[]{"鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"};
return zodiacs[(year - start) % zodiacs.length];
}
}
public static int getAgeFromBirthDay(Date birthDay) {
Calendar cal = Calendar.getInstance();
cal.setTime(birthDay);
Calendar now = Calendar.getInstance();
if (cal.after(now)) {
throw new IllegalArgumentException("The birthDay is after now.");
} else {
int age = now.get(1) - cal.get(1);
int month = cal.get(2);
int day = cal.get(5);
if (month == 2 && day == 29) {
if (now.get(2) < 2) {
--age;
}
} else if (cal.get(2) > now.get(2) || cal.get(2) == now.get(2) && cal.get(5) > now.get(5)) {
--age;
}
return age;
}
}
/**
* 返回 年月日小时分秒
*
* @return yyyyMMddHHmmss
*/
public static String getTodayChar14() {
return DateUtils.format(new Date(), "yyyyMMddHHmmss");
}
/**
* 返回 年月日
*
* @return yyyyMMdd
*/
public static String getTodayChar15() {
return DateUtils.format(new Date(), "yyyyMMdd");
}
/**
* 返回 年月日小时分秒 毫秒
*
* @return yyyyMMddHHmmssS
*/
public static String getTodayChar17() {
String dateString = DateUtils.format(new Date(), "yyyyMMddHHmmss");
int length = dateString.length();
if (length < 17) {
String endStr = dateString.substring(14, length);
int len = endStr.length();
for (int i = 0; i < 3 - len; i++) {
endStr = "0" + endStr;
}
dateString = dateString.substring(0, 14) + endStr;
}
return dateString;
}
public static Date getDateNow() {
return new Date();
}
public static LocalDate getLocalDateNow() {
return LocalDate.now();
}
public static LocalDateTime getLocalDateTimeNow() {
return LocalDateTime.now();
}
public static Long getTimestampNow() {
Calendar calendar = Calendar.getInstance();
long timestamp = calendar.getTimeInMillis();
return timestamp;
}
//Date -> 毫秒时间戳
public static String dateToTimeStampTime(Date date) {
long time = date.getTime();
return String.valueOf(time);
}
//Date -> LocalDateTime
public static LocalDateTime dateToLocalDateTime(Date date) {
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zone);
}
//Date -> LocalDate
public static LocalDate dateToLocalDate(Date date) {
LocalDateTime localDateTime = dateToLocalDateTime(date);
return localDateTime.toLocalDate();
}
//Date -> LocalTime
public static LocalTime dateToLocalTime(Date date) {
LocalDateTime localDateTime = dateToLocalDateTime(date);
return localDateTime.toLocalTime();
}
//timeStamp时间戳 -> Date
public static Date timeStampToDate(Long timeStamp) {
String dateString = sdf.format(new Date(timeStamp)); // Date对象转换为字符串
Date date = null; // 字符串转换为Date对象
try {
date = sdf.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
//LocalDateTime -> Date
public static Date localDateTimeToDate(LocalDateTime localDateTime) {
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
return Date.from(instant);
}
//LocalDate -> Date
public static Date localDateToDate(LocalDate localDate) {
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
return Date.from(instant);
}
//LocalTime -> Date
public static Date localTimeToDate(LocalTime localTime) {
LocalDate localDate = LocalDate.now();
ZoneId zone = ZoneId.systemDefault();
Instant instant = LocalDateTime.of(localDate, localTime).atZone(zone).toInstant();
return Date.from(instant);
}
//LocalDateTime 增加多少秒
public static LocalDateTime localDateTimePlusSecond(LocalDateTime localDateTime, Long second) {
LocalDateTime time = localDateTime.plusSeconds(second);
return time;
}
//两个LocalDateTime相差多少毫秒
public static Long durationMillis(LocalDateTime start, LocalDateTime end)
{
Duration duration = Duration.between(start,end);
long millis = duration.toMillis();
return millis;
}
//两个Date相差多少相差多少毫秒
public static Long durationMillis(Date start, Date end)
{
Duration duration = Duration.between(dateToLocalDateTime(start),dateToLocalDateTime(end));
long millis = duration.toMillis();
return millis;
}
//两个LocalDateTime相差多少秒
public static Long durationSeconds(LocalDateTime start, LocalDateTime end)
{
Duration duration = Duration.between(start,end);
long seconds = duration.getSeconds();
return seconds;
}
//两个Date相差多少相差多少秒
public static Long durationSeconds(Date start, Date end)
{
Duration duration = Duration.between(dateToLocalDateTime(start),dateToLocalDateTime(end));
long seconds = duration.getSeconds();
return seconds;
}
//将秒转化为时分秒的格式
public static String formatHMS(long second) {
int temp = (int) second;
int hh = temp / 3600;
int mm = (temp % 3600) / 60;
int ss = (temp % 3600) % 60;
return (hh < 10 ? ("0" + hh) : hh) + ":" +
(mm < 10 ? ("0" + mm) : mm) + ":" +
(ss < 10 ? ("0" + ss) : ss);
}
/**
* 计算是否超时,超时多久
* @param start 开始时间
* @param second 超时几秒钟
* @param now 当前时间
* @return
*/
public static Long durationSeconds(Date start, long second, Date now)
{
LocalDateTime time = dateToLocalDateTime(start);
LocalDateTime startTime = localDateTimePlusSecond(time, second);
LocalDateTime endTime = dateToLocalDateTime(now);
Duration duration = Duration.between(startTime,endTime);
long seconds = duration.getSeconds();
return seconds;
}
/**
* 增加 LocalDateTime ==> Date
*/
public static Date toDate(LocalDateTime temporalAccessor)
{
ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
return Date.from(zdt.toInstant());
}
/**
* 增加 LocalDate ==> Date
*/
public static Date toDate(LocalDate temporalAccessor)
{
LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
return Date.from(zdt.toInstant());
}
/**
* 获取当前日期, 默认格式为yyyy-MM-dd
*
* @return String
*/
public static String getDate()
{
return dateTimeNow(PATTERN_DATE);
}
public static final String getTime()
{
return dateTimeNow(PATTERN_DATETIME);
}
public static final String dateTimeNow()
{
return dateTimeNow(PATTERN_SHORT_DATETIME);
}
public static final String dateTimeNow(final String format)
{
return parseDateToStr(format, new Date());
}
public static final String dateTime(final Date date)
{
return parseDateToStr(PATTERN_DATE, date);
}
public static final String parseDateToStr(final String format, final Date date)
{
return new SimpleDateFormat(format).format(date);
}
public static final Date dateTime(final String format, final String ts)
{
try
{
return new SimpleDateFormat(format).parse(ts);
}
catch (ParseException e)
{
throw new RuntimeException(e);
}
}
/**
* 日期路径 即年/月/日 如2018/08/08
*/
public static final String datePath()
{
Date now = new Date();
return DateFormatUtils.format(now, "yyyy/MM/dd");
}
/**
* 日期路径 即年/月/日 如20180808
*/
public static final String dateTime()
{
Date now = new Date();
return DateFormatUtils.format(now, "yyyyMMdd");
}
/**
* 日期型字符串转化为日期 格式
*/
public static Date parseDate(Object str)
{
if (str == null)
{
return null;
}
try
{
return parseDate(str.toString(), parsePatterns);
}
catch (ParseException e)
{
return null;
}
}
/**
* 获取服务器启动时间
*/
public static Date getServerStartDate()
{
long time = ManagementFactory.getRuntimeMXBean().getStartTime();
return new Date(time);
}
/**
* 计算两个时间差
*/
public static String getDatePoor(Date endDate, Date nowDate)
{
long nd = 1000 * 24 * 60 * 60;
long nh = 1000 * 60 * 60;
long nm = 1000 * 60;
// long ns = 1000;
// 获得两个时间的毫秒时间差异
long diff = endDate.getTime() - nowDate.getTime();
// 计算差多少天
long day = diff / nd;
// 计算差多少小时
long hour = diff % nd / nh;
// 计算差多少分钟
long min = diff % nd % nh / nm;
// 计算差多少秒//输出结果
// long sec = diff % nd % nh % nm / ns;
return day + "天" + hour + "小时" + min + "分钟";
}
public static Date addHour(Date time, int hour) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
calendar.add(Calendar.HOUR_OF_DAY, hour);
return calendar.getTime();
}
}