package com.puboot.common.util;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
/**
* 日期工具类
*
* @author Linzhaoguan
* @version V1.0
* @date 2019年9月11日
*/
@Slf4j
@UtilityClass
public class DateUtil {
public static final long ONE_DAY_SECONDS = 86400;
public static final String SHORT_FORMAT = "yyyyMMdd";
public static final String LONG_FORMAT = "yyyyMMddHHmmss";
public static final String concurrentFormat = "yyyyMMddHHmmssSSS";
public static final String shortConcurrentFormat = "yyMMddHHmmssSSS";
public static final String webFormat = "yyyy-MM-dd";
public static final String webMonthFormat = "yyyy-MM";
public static final String timeFormat = "HH:mm:ss";
public static final String monthFormat = "yyyyMM";
public static final String chineseDtFormat = "yyyy年MM月dd日";
public static final String chineseYMFormat = "yyyy年MM月";
public static final String newFormat = "yyyy-MM-dd HH:mm:ss";
public static final String noSecondFormat = "yyyy-MM-dd HH:mm";
public static final String MdFormat = "MM-dd";
public static final long ONE_DAY_MILL_SECONDS = 86400000;
public static DateFormat getNewDateFormat(String pattern) {
DateFormat df = new SimpleDateFormat(pattern);
df.setLenient(false);
return df;
}
public static String format(Date date, String format) {
return new SimpleDateFormat(format).format(date);
}
public static String format(String dateStr, String oldFormat, String newFormat) throws ParseException {
String result = null;
DateFormat oldDateFormat = new SimpleDateFormat(oldFormat);
DateFormat newDateFormat = new SimpleDateFormat(newFormat);
Date date = oldDateFormat.parse(dateStr);
result = newDateFormat.format(date);
return result;
}
public static Date parseDateNoTime(String sDate) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat(SHORT_FORMAT);
return dateFormat.parse(sDate);
}
public static Date parseDateNoTime(String sDate, String format) throws ParseException {
if (StringUtils.isBlank(format)) {
throw new ParseException("Null format. ", 0);
}
DateFormat dateFormat = new SimpleDateFormat(format);
return dateFormat.parse(sDate);
}
public static Date parseDateNoTimeWithDelimit(String sDate, String delimit) throws ParseException {
sDate = sDate.replaceAll(delimit, "");
DateFormat dateFormat = new SimpleDateFormat(SHORT_FORMAT);
return dateFormat.parse(sDate);
}
public static Date parseDateLongFormat(String sDate) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat(LONG_FORMAT);
return dateFormat.parse(sDate);
}
public static Date parseDateNewFormat(String sDate) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat(newFormat);
dateFormat.setLenient(false);
return dateFormat.parse(sDate);
}
public static Date parseDateNoSecondFormat(String sDate) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat(noSecondFormat);
dateFormat.setLenient(false);
return dateFormat.parse(sDate);
}
public static Date parseDateWebFormat(String sDate) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat(webFormat);
dateFormat.setLenient(false);
return dateFormat.parse(sDate);
}
public static Date parseDateWebMonthFormat(String sDate) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat(webMonthFormat);
dateFormat.setLenient(false);
return dateFormat.parse(sDate);
}
/**
* 计算当前时间几小时之后的时间
*
* @param date
* @param hours
* @return
*/
public static Date addHours(Date date, long hours) {
return addMinutes(date, hours * 60);
}
/**
* 计算当前时间几分钟之后的时间
*
* @param date
* @param minutes
* @return
*/
public static Date addMinutes(Date date, long minutes) {
return addSeconds(date, minutes * 60);
}
/**
* @param date1
* @param secs
* @return
*/
public static Date addSeconds(Date date1, long secs) {
return new Date(date1.getTime() + secs * 1000);
}
/**
* 判断输入的字符串是否为合法的小时
*
* @param hourStr
* @return true/false
*/
public static boolean isValidHour(String hourStr) {
if (!StringUtils.isEmpty(hourStr) && StringUtils.isNumeric(hourStr)) {
int hour = Integer.parseInt(hourStr);
return hour >= 0 && hour <= 23;
}
return false;
}
/**
* 判断输入的字符串是否为合法的分或秒
*
* @param str
* @return true/false
*/
public static boolean isValidMinuteOrSecond(String str) {
if (!StringUtils.isEmpty(str) && StringUtils.isNumeric(str)) {
int hour = Integer.parseInt(str);
return hour >= 0 && hour <= 59;
}
return false;
}
/**
* 取得新的日期
*
* @param date1 日期
* @param days 天数
* @return 新的日期
*/
public static Date addDays(Date date1, long days) {
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
cal.add(Calendar.DATE, (int) days);
return cal.getTime();
}
public static String getTomorrowDateString(String sDate) throws ParseException {
Date aDate = parseDateNoTime(sDate);
aDate = addSeconds(aDate, ONE_DAY_SECONDS);
return getDateString(aDate);
}
public static String getTomorrowDateNewFMTString(String sDate) throws ParseException {
Date aDate = parseDateWebFormat(sDate);
aDate = addDays(aDate, 1);
return getWebDateString(aDate);
}
public static String getTomorrowDateNewFormatString(String sDate) throws ParseException {
Date aDate = parseDateNewFormat(sDate);
aDate = addDays(aDate, 1);
return getWebDateString(aDate);
}
public static String getLongDateString(Date date) {
DateFormat dateFormat = new SimpleDateFormat(LONG_FORMAT);
return getDateString(date, dateFormat);
}
public static String getNewFormatDateString(Date date) {
DateFormat dateFormat = new SimpleDateFormat(newFormat);
return getDateString(date, dateFormat);
}
public static String getWebFormatDateString(Date date) {
DateFormat dateFormat = new SimpleDateFormat(webFormat);
return getDateString(date, dateFormat);
}
public static String getConcurrentFormatDateString(Date date) {
DateFormat dateFormat = new SimpleDateFormat(concurrentFormat);
return getDateString(date, dateFormat);
}
public static String getDateString(Date date, DateFormat dateFormat) {
if (date == null || dateFormat == null) {
return null;
}
return dateFormat.format(date);
}
public static String getYesterDayDateString(String sDate) throws ParseException {
Date aDate = parseDateNoTime(sDate);
aDate = addSeconds(aDate, -ONE_DAY_SECONDS);
return getDateString(aDate);
}
/**
* @return 当天的时间格式化为"yyyyMMdd"
*/
public static String getDateString(Date date) {
DateFormat df = getNewDateFormat(SHORT_FORMAT);
return df.format(date);
}
public static String getWebDateString(Date date) {
DateFormat dateFormat = getNewDateF
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
采用SpringBoot + Apache Shiro + Mybatis Plus + Thymeleaf 实现的内容管理系统(附带权限管理),是搭建博客、网站的不二之选。 技术栈:Spring Boot、Apache Shiro、MyBatis-Plus、Alibaba Druid、Redis、MySQL、Thymeleaf、Google Guava 安装 将本项目源码导入本地开发工具(如 IntelliJ IDEA ),本地开发工具需要安装 lombok 插件 安装Mysql数据库:Mysql版本最低支持5.7,新建 database CREATE DATABASE pb_cms_base; 初始化数据库:找到项目数据库文件:docs/db/pb_cms_base.sql,执行 pb_cms_base.sql 安装Redis:Redis最低版本支持 3.2 修改(resources/application.yml)配置文件 修改数据库链接相关连接串、用户名和密码(可搜索datasource) redis配置(可搜索redis) 运行项目(三种方式) 项目根目录下执行mvn -
资源推荐
资源详情
资源评论
收起资源包目录
SpringBoot + Apache Shiro + Mybatis Plus + Thymeleaf 实现的内容管理系统 (2000个子文件)
config.bak 3KB
adminlte.css 770KB
adminlte.min.css 671KB
adminlte.core.css 385KB
adminlte.core.min.css 327KB
adminlte.plugins.css 195KB
adminlte.plugins.min.css 176KB
adminlte.components.css 140KB
adminlte.components.min.css 126KB
bootstrap.min.css 118KB
adminlte.min.css 88KB
all.css 71KB
all.css 71KB
fontawesome.css 69KB
fontawesome.css 69KB
all.min.css 57KB
all.min.css 57KB
fontawesome.min.css 56KB
fontawesome.min.css 56KB
v4-shims.css 40KB
v4-shims.css 40KB
editor.css 40KB
all-skins.min.css 40KB
flag-icon.css 37KB
jquery-ui.css 36KB
icon.css 36KB
pace-theme-material.css 34KB
pace-theme-material.css 34KB
pace-theme-material.css 34KB
pace-theme-material.css 34KB
pace-theme-material.css 34KB
pace-theme-material.css 34KB
pace-theme-material.css 34KB
pace-theme-material.css 34KB
pace-theme-material.css 34KB
pace-theme-material.css 34KB
flag-icon.min.css 33KB
jquery-ui.min.css 31KB
font-awesome.min.css 30KB
main.css 27KB
v4-shims.min.css 26KB
v4-shims.min.css 26KB
bootstrap-switch.css 23KB
OverlayScrollbars.css 23KB
swiper.css 22KB
_all.css 21KB
adminlte.extra-components.css 21KB
bootstrap-switch.min.css 19KB
swiper.min.css 19KB
OverlayScrollbars.min.css 19KB
jquery-ui.structure.css 18KB
jquery-ui.theme.css 18KB
adminlte.extra-components.min.css 18KB
web.min.css 16KB
_all.css 15KB
jquery-ui.structure.min.css 15KB
icheck-bootstrap.css 14KB
layer.css 14KB
layer.css 14KB
main.min.css 14KB
_all.css 14KB
jquery-ui.theme.min.css 14KB
_all.css 13KB
web-blog.css 13KB
icheck-bootstrap.min.css 12KB
github-markdown.min.css 11KB
bootstrap-colorpicker.css 11KB
simplemde.min.css 11KB
bootstrap-slider.css 10KB
webuploader.css 10KB
webuploader.css 10KB
admin-common.css 10KB
bootstrap-table.css 9KB
bootstrap-colorpicker.min.css 9KB
pace-theme-loading-bar.css 9KB
pace-theme-loading-bar.css 9KB
pace-theme-loading-bar.css 9KB
pace-theme-loading-bar.css 9KB
pace-theme-loading-bar.css 9KB
pace-theme-loading-bar.css 9KB
pace-theme-loading-bar.css 9KB
pace-theme-loading-bar.css 9KB
pace-theme-loading-bar.css 9KB
pace-theme-loading-bar.css 9KB
bootstrap-slider.min.css 9KB
dialog.css 9KB
tempusdominus-bootstrap-4.min.css 9KB
tempusdominus-bootstrap-4.css 9KB
bootstrap-table.min.css 9KB
svg-with-js.css 8KB
svg-with-js.css 8KB
web-common.css 8KB
daterangepicker.css 7KB
adminlte.pages.css 7KB
fontawesome-iconpicker.css 7KB
fontawesome-iconpicker.css 7KB
main.css 7KB
ekko-lightbox.css 7KB
ztree-bootstrap.css 6KB
ztree-bootstrap.css 6KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
- 信息学院女皇2023-02-13资源中能够借鉴的内容很多,值得学习的地方也很多,大家一起进步!
- weixin_402655572022-12-21资源太好了,解决了我当下遇到的难题,抱紧大佬的大腿~
- weixin_398349752023-04-06资源很受用,资源主总结的很全面,内容与描述一致,解决了我当下的问题。
- weixin_382686052023-03-29资源不错,很实用,内容全面,介绍详细,很好用,谢谢分享。
- nongba22152022-08-29资源不错,很实用,内容全面,介绍详细,很好用,谢谢分享。
「已注销」
- 粉丝: 794
- 资源: 3613
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功