😁 作者:Teddy (公众号:鸡仓故事汇)
⏰ 时间:2021年03月17日11:19:20
☁️ 天气:晴天
前言
随着网络不断的发展,很多开发的平台都有专门的统计报表,最可视化的看到公司运营情况。随之对我们开发带来的就是数据的处理,根据不同时间归类,根据时间统计,根据时间展示图标等等一系列。相对java而言,我整理了一份自己相对用的比较多的处理时间工具类,希望能给大家带来方便!文章不好,勿喷。
提示:以下是本篇文章正文内容,下面案例可供参考
代码篇章
代码如下(示例):
package com.wx.config;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* @program: teddylife
* @description: 自己用着最顺手的时间处理工具类
* @author: Mr.Teddy
* @create: 2021年03月17日11:18:40
**/
@Component
public class DateConfig {
private static int month = Calendar.getInstance().get(Calendar.MONTH) + 1;
private final static String DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss";
private final static String DEFAULT_FORMAT_NO_HOUR = "yyyy-MM-dd";
private static SimpleDateFormat dateFormat;
private static SimpleDateFormat dateFormatNoHour;
static {
dateFormat = new SimpleDateFormat(DateConfig.DEFAULT_FORMAT);
dateFormatNoHour = new SimpleDateFormat(DateConfig.DEFAULT_FORMAT_NO_HOUR);
}
/**
* 判断选择的日期是否是今天
* @param time 当前时间戳
*/
public static boolean isToday(long time) {
return isThisTime(time, "yyyy-MM-dd");
}
/**
* 判断选择的日期是否是本周
* @param time 当前时间戳
*/
public static boolean isThisWeek(long time) {
Calendar calendar = Calendar.getInstance();
int currentWeek = calendar.get(Calendar.WEEK_OF_YEAR);
calendar.setTime(new Date(time));
int paramWeek = calendar.get(Calendar.WEEK_OF_YEAR);
return paramWeek == currentWeek;
}
/**
* 判断选择的日期是否是本月
* @param time 当前时间戳
*/
public static boolean isThisMonth(long time) {
return isThisTime(time, "yyyy-MM");
}
/**
* 比较时间戳
* @param time 时间戳
* @param pattern 格式值
*/
private static boolean isThisTime(long time, String pattern) {
Date date = new Date(time);
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String param = sdf.format(date);
String now = sdf.format(new Date());
return param.equals(now);
}
/**
* 获得当前日期,默认 yyyy-MM-dd HH:mm:ss 小写的hh取得12小时,大写的HH取的是24小时
* @param format 格式
*/
public static String getCurrentTime(String format) {
return (StringUtils.isNotBlank(format) ? new SimpleDateFormat(format) : dateFormat).format(new Date());
}
//
/**
* 指定时间格式化Date类型,指定格式yyyy-MM-dd HH:mm:ss 小写的hh取得12小时,大写的HH取的是24小时
* @param date 时间
* @param format 格式
*/
public static String getFormat(Date date, String format) {
return (StringUtils.isNotBlank(format) ? new SimpleDateFormat(format) : dateFormat).format(date);
}
/**
* 获取指定点的时间
* @param hour 时
* @param minute 分
* @param second 秒
*/
public static Date getHourAndMinuteAndSecond(Integer hour, Integer minute, Integer second){
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, hour == null ? 0 : hour);
c.set(Calendar.MINUTE, minute == null ? 0 : minute);
c.set(Calendar.SECOND, second == null ? 0 : second);
return c.getTime();
}
/**
* 得到两个时间差 格式yyyy-MM-dd HH:mm:ss
* @param start 开始时间
* @param end 结束时间
*/
public static long dateSubtraction(String start, String end) {
try {
return dateFormat.parse(end).getTime() - dateFormat.parse(start).getTime();
} catch (ParseException e) {
return 0;
}
}
/**
* 转化long值的日期为yyyy-MM-dd HH:mm:ss.SSS格式的日期
* @param millSec 时间日期
*/
public static String transferLongToDate(long millSec) {
return dateFormat.format(new Date(millSec));
}
/**
* 获取当前日期是第几天
* @param type 单位划分
* 0: 一周
* 1: 一月
* 2:一年
*/
public static int getDayOfX(Integer type) {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
int isDay = 0;
switch (type) {
case 0: isDay = cal.get(Calendar.DAY_OF_WEEK) - 1; break;
case 1: isDay = cal.get(Calendar.DAY_OF_MONTH); break;
case 2: isDay = cal.get(Calendar.DAY_OF_YEAR); break;
}
return isDay;
}
/**
* 获取最近某个月
*
* @param num 月为单位
* 获取7天前 month=7; type = 0
* 获取3个月前 month=3; type = 1
* 获取1年前 month=1; type = 2
* @param type
* 0: 以天为单位
* 1: 以月为单位
* 2:以年为单位
* @param format 格式化参数 默认:年-月-日
*/
public static String getOfLateMonthTime(Integer num, Integer type, String format) {
Calendar c = Calendar.getInstance();
switch (type) {
case 0: c.add(Calendar.DATE, -num); break;
case 1: c.add(Calendar.MONTH, -num); break;
case 2: c.add(Calendar.YEAR, -num); break;
}
return (StringUtils.isNotBlank(format) ? new SimpleDateFormat(format) : dateFormatNoHour).format(c.getTime());
}
/**
* 获取今年月份数据
* 说明 有的需求前端需要根据月份查询每月数据,此时后台给前端返回今年共有多少月份
* @return [1, 2, 3, 4]
*/
public static List getMonthList(){
List list = new ArrayList();
for (int i = 1; i <= month; i++) {
list.add(i);
}
return list;
}
/**
* 返回当前年度季度list
* 本年度截止目前共三个季度,然后根据1,2分别查询相关起止时间
* @return [1, 2]
*/
public static List getQuartList(){
int quart = month / 3 + 1;
List list = new ArrayList();
for (int i = 1; i <= quart; i++) {
list.add(i);
}
return list;
}
/**
* 获得某天最大时间
* @param date 某天的当前时间
* @return 实例:2021-03-17 23:59:59
*/
public static Date getEndOfDay(Date date) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());;
LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);
return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
}
/**
* 获得某天最小时间
* @param date 某天的当前时间
* @return 实例:2021-03-17 00:00:00
*/
public static Date getStartOfDay(Date date) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);
return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
}
}
总结
ok!到这里就大功告成,小编(Teddy)在这里先感谢大家的到来。
虽然不是太详细,小编已经很努力,给小编来个一键三连(点赞,关注,收藏),小编会越来越努力。。。