开发中总会碰到各种各样时间相关的获取和计算,每次写新的方法不仅麻烦,还造成代码不能复用率低得缺点,所以总结了下日期相关操作的公共工具类。
如下每种类型拷贝一个示例:完整版的查看:https://download.csdn.net/download/u011909918/10895907
一、Calendar,Date,DateFormat
Calendar: 日历类
Date:日期类
DateFormat:日期显示模板
二、常量定义
//两种常见日期类型
public static final DateFormat YYYYMMDDHHMISS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static final DateFormat YYYYMMDD = new SimpleDateFormat("yyyy-MM-dd");
public static final String[] WEEKS = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
//日期类型
public enum DateType{
YEAR(365*24*60*60*1000L),
MONTH(30*24*60*60*1000L),
DAY(24*60*60*1000L),
HOUR(60*60*1000L),
MINUTE(60000L),
SECOND(1000L),
MILLISECOND(1L);
private Long index;
DateType(Long index){
this.index = index;
}
public Long getIndex(){
return this.index;
}
}
三、主要内容
1、三种类型的当前时间获取方法
/**
* 查询当前String时间
*
* @param df 时间模板
* @return String类型的时间
*
* @auth LD
* @date 2019-01-03
*
* */
public static String currentTimeString(DateFormat df){
if(df == null){
df = YYYYMMDDHHMISS;
}
return df.format(new Date());
}
2、三种日期类型的相互转换(6个方法)
/**
* String --> Long
*
* @param date 需要转换的时间参数
* @return Long类型的时间
*
* @auth LD
* @date 2019-01-03
*
* */
public static Long timeString2Long(String date) throws ParseException{
return YYYYMMDDHHMISS.parse(date).getTime();
}
3、三种类型的时间差计算(单位通过DateType设置,年/月/日/时/分/秒/毫秒)
/**
* String时间差(end - begin)
*
* @param begin 开始时间
* @param end 结束时间
* @param dateType 返回时间类型(年月日时分秒),从DateType中获取 DateType.YEAR.getIndex();
* @return Double型时间差
*
* @auth LD
* @date 2019-01-03
*
* */
public static Double timeMinus(String begin, String end, Long dateType) throws ParseException{
Long resultMillisecond = YYYYMMDDHHMISS.parse(end).getTime() - YYYYMMDDHHMISS.parse(begin).getTime();
return Math.round((resultMillisecond*1.0/dateType) * 100)/100.0;
}
4、获取输入日期的详细信息
/**
* 获取年月日时分秒By String
*
* @return String类型的时间 yyyy-MM-dd HH:mm:ss格式
*
* @auth LD
* @date 2019-01-03
*
* */
public static Map<String, Object> timeDetail(String date) throws ParseException{
Map<String, Object> result = new HashMap<>();
Calendar calendar = Calendar.getInstance();
calendar.setTime(YYYYMMDDHHMISS.parse(date));
int dayWeek = calendar.get(Calendar.DAY_OF_WEEK) == 1? 7: calendar.get(Calendar.DAY_OF_WEEK);
result.put("year", calendar.get(Calendar.YEAR));
result.put("month", calendar.get(Calendar.MONTH) + 1);
result.put("dayYear", calendar.get(Calendar.DAY_OF_YEAR));
result.put("dayMonth", calendar.get(Calendar.DAY_OF_MONTH));
result.put("dayWeekInt", calendar.get(Calendar.DAY_OF_WEEK));
result.put("dayWeekString", WEEKS[dayWeek-2]);
result.put("hour", calendar.get(Calendar.HOUR_OF_DAY));
result.put("minute", calendar.get(Calendar.MINUTE));
result.put("second", calendar.get(Calendar.SECOND));
return result;
}
5、获取输入日期周边几周的日期信息
/**
* 获取输入时间当前或前后几周的日期(周一为第一天)
*
* @param date 输入时间
* @param after 推后几周,当前为0,推后为正,提前为负
* @return String类型的时间
*
* @auth LD
* @date 2019-01-03
*
* */
public static Map<String, Object> timeWeekDays(String date, int after) throws ParseException{
Map<String, Object> result = new LinkedHashMap<>();
Calendar calendar = Calendar.getInstance();
calendar.setTime(YYYYMMDDHHMISS.parse(date));
//日历提前或推后
calendar.add(Calendar.DAY_OF_YEAR, after*7);
//获取周一时间
if(1 == calendar.get(Calendar.DAY_OF_WEEK)){
calendar.add(Calendar.DAY_OF_YEAR, -6);
}
calendar.add(Calendar.DAY_OF_YEAR, 2 - calendar.get(Calendar.DAY_OF_WEEK));
result.put(WEEKS[0], YYYYMMDD.format(calendar.getTime()));
for(int i=1; i < 7; i++){
calendar.add(Calendar.DAY_OF_YEAR, 1);
result.put(WEEKS[i], YYYYMMDD.format(calendar.getTime()));
}
return result;
}
6、获取输入时间周边X天的日期
/**
* 获取输入时间当前或前后几天的日期
*
* @param date 输入时间
* @param after 推后几天,当前为0,推后为正,提前为负
* @return String类型的时间
*
* @auth LD
* @date 2019-01-03
*
* */
public static String timeDays(String date, int after) throws ParseException{
Calendar calendar = Calendar.getInstance();
calendar.setTime(YYYYMMDDHHMISS.parse(date));
//日历提前或推后
calendar.add(Calendar.DAY_OF_YEAR, after);
return YYYYMMDD.format(calendar.getTime());
}
7、获取输入时间当月天数
/**
* 获取输入时间当月天数
*
* @param date 输入时间
*
* @auth LD
* @date 2019-01-08
*
* */
public static Integer timeMonthDays(String date) throws ParseException{
Calendar calendar = Calendar.getInstance();
calendar.setTime(YYYYMMDDHHMISS.parse(date));
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.DAY_OF_YEAR, -1);
return calendar.get(Calendar.DAY_OF_MONTH);
}
欢迎各位大佬指正补充。。。。