package com.vincent.rsf.framework.common;
|
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.Objects;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* 时间工具类
|
* Created by vincent on 2019-04-15
|
*/
|
public class DateUtils {
|
|
public final static String yyyyMMdd_C="yyyy年MM月dd日";
|
public final static String yyyyMM_F="yyyy-MM";
|
public final static String yyyyMMdd_F="yyyy-MM-dd";
|
public final static String yyyyMMddHHmmss_F="yyyy-MM-dd HH:mm:ss";
|
public final static String yyyyMMddHHmmsssss_F="yyyy-MM-dd HH:mm:ss,SSS";
|
public final static String yyyy="yyyy";
|
public final static String yyyyMM="yyyyMM";
|
public final static String yyyyMMdd="yyyyMMdd";
|
public final static String yyyyMMddHH="yyyyMMddHH";
|
public final static String yyyyMMddHHmmss="yyyyMMddHHmmss";
|
public final static String YYMMDDHHMMSS="YYMMDDHHMMSS";
|
public final static String yyyyMMddHHmmsssss="yyyyMMddHHmmssSSS";
|
public final static String yyyyMMddTHHmmsssssZ_F="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
|
|
/**
|
* date ==>> string
|
*/
|
public static String convert(Date date, String pattern){
|
return new SimpleDateFormat(pattern).format(date);
|
}
|
|
public static String convert(Date date){
|
return convert(date, yyyyMMddHHmmss_F);
|
}
|
|
/**
|
* string ==>> date
|
*/
|
public static Date convert(String str, String pattern){
|
// if (str.length() < pattern.length()){
|
// throw new RuntimeException("时间解析失败 ==>> "+str);
|
// }
|
// if (str.length() > pattern.length()){
|
// str = str.substring(0, pattern.length());
|
// }
|
SimpleDateFormat format = new SimpleDateFormat(pattern);
|
Date date;
|
try {
|
date = format.parse(str);
|
} catch (ParseException e) {
|
throw new RuntimeException("时间解析失败 ==>> "+str);
|
}
|
return date;
|
}
|
|
public static Date convert(String str){
|
return convert(str, yyyyMMddHHmmss_F);
|
}
|
|
/**
|
* 两个date之间相差的天数,不满一天算一天
|
*/
|
public static int diff(Date date1, Date date2){
|
return getDaysByTimestamp(Math.abs(date2.getTime() - date1.getTime()));
|
}
|
|
public static long diffToMinute(Date date1, Date date2){
|
return Math.abs(date2.getTime() - date1.getTime())/1000/60;
|
}
|
|
public static long diffToSeconds(Date date1, Date date2){
|
return Math.abs(date2.getTime() - date1.getTime())/1000;
|
}
|
|
private static int getDaysByTimestamp(long timestamp){
|
double daysPoint = Arith.divides(2, timestamp, (1000 * 3600 * 24));
|
int daysPoint1 = (int) daysPoint;
|
double daysPoint2 = (double) daysPoint1;
|
if (daysPoint > daysPoint2){
|
return daysPoint1 + 1;
|
}
|
return daysPoint1;
|
}
|
|
/**
|
* 入参date距离现在的秒数
|
*/
|
public static int diffToNow(Date date){
|
long diff = new Date().getTime() - date.getTime();
|
return (int) (Math.abs(diff) / 1000);
|
}
|
|
/**
|
* 当前时间戳(单位:秒)
|
*/
|
public static String createTimeStamp() {
|
return Long.toString(System.currentTimeMillis() / 1000);
|
}
|
|
/**
|
* 时间计算函数
|
* @param date 被计算时间实例
|
* @param val 计算值
|
* @param timeUnit 计算值单位
|
* @param subtraction 减法布尔 true:当前函数为减法计算,false:反之
|
* @return 计算结果 Date
|
*/
|
public static Date calculate(Date date, Long val, TimeUnit timeUnit, boolean subtraction){
|
if (Objects.isNull(date) || Objects.isNull(val) || Objects.isNull(timeUnit)){
|
return null;
|
}
|
return new Date(subtraction?date.getTime()-timeUnit.toMillis(val):date.getTime()+timeUnit.toMillis(val));
|
}
|
|
public static Date calculate(Date date, Long val, TimeUnit timeUnit){
|
return calculate(date, val, timeUnit, false);
|
}
|
|
/**
|
* 时间对象DateEntity
|
*/
|
public static DateEntity getDateEntity(Date date){
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
DateEntity dateEntity = new DateEntity();
|
dateEntity.setYear(cal.get(Calendar.YEAR));
|
dateEntity.setMonth(cal.get(Calendar.MONTH));
|
dateEntity.setDay(cal.get(Calendar.DATE));
|
dateEntity.setHour(cal.get(Calendar.HOUR_OF_DAY));
|
dateEntity.setMinute(cal.get(Calendar.MINUTE));
|
dateEntity.setSecond(cal.get(Calendar.SECOND));
|
return dateEntity;
|
}
|
|
static class DateEntity {
|
int year;
|
int month;
|
int day;
|
int hour;
|
int minute;
|
int second;
|
|
public int getYear() {
|
return year;
|
}
|
|
public void setYear(final int year) {
|
this.year = year;
|
}
|
|
public int getMonth() {
|
return month;
|
}
|
|
public void setMonth(final int month) {
|
this.month = month + 1;
|
}
|
|
public int getDay() {
|
return day;
|
}
|
|
public void setDay(final int day) {
|
this.day = day;
|
}
|
|
public int getHour() {
|
return hour;
|
}
|
|
public void setHour(final int hour) {
|
this.hour = hour;
|
}
|
|
public int getMinute() {
|
return minute;
|
}
|
|
public void setMinute(final int minute) {
|
this.minute = minute;
|
}
|
|
public int getSecond() {
|
return second;
|
}
|
|
public void setSecond(final int second) {
|
this.second = second;
|
}
|
}
|
}
|