package com.fanwei.dbadminer.base.util;
import com.fanwei.dbadminer.base.enums.DateStyleEnum;
import com.fanwei.dbadminer.base.enums.WeekEnum;
import org.apache.commons.lang3.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.management.ManagementFactory;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.*;
public class DateUtil {
private static final Logger log = LoggerFactory.getLogger(DateUtil.class);
private static final ThreadLocal<SimpleDateFormat> THREAD_LOCAL = new ThreadLocal<>();
private static final Object OBJECT = new Object();
public static final int FIRST_DAY_OF_WEEK = Calendar.MONDAY;
private final static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private final static SimpleDateFormat HOUR_SDF = new SimpleDateFormat("yyyy-MM-dd HH");
private final static SimpleDateFormat DAY_SDF = new SimpleDateFormat("yyyy-MM-dd");
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"};
/**
* 获取SimpleDateFormat
*
* @param pattern 日期格式
* @return SimpleDateFormat对象
* @throws RuntimeException 异常:非法日期格式
*/
private static SimpleDateFormat getDateFormat(String pattern) throws RuntimeException {
SimpleDateFormat dateFormat = THREAD_LOCAL.get();
if (dateFormat == null) {
synchronized (OBJECT) {
if (dateFormat == null) {
dateFormat = new SimpleDateFormat(pattern);
dateFormat.setLenient(false);
THREAD_LOCAL.set(dateFormat);
}
}
}
dateFormat.applyPattern(pattern);
return dateFormat;
}
/**
* 获取日期中的某数值。如获取月份
*
* @param date 日期
* @param dateType 日期格式
* @return 数值
*/
private static int getInteger(Date date, int dateType) {
int num = 0;
Calendar calendar = Calendar.getInstance();
if (date != null) {
calendar.setTime(date);
num = calendar.get(dateType);
}
return num;
}
/**
* 增加日期中某类型的某数值。如增加日期
*
* @param date 日期字符串
* @param dateType 类型
* @param amount 数值
* @return 计算后日期字符串
*/
private static String addInteger(String date, int dateType, int amount) {
String dateString = null;
DateStyleEnum dateStyle = getDateStyle(date);
if (dateStyle != null) {
Date myDate = stringToDate(date, dateStyle);
myDate = addInteger(myDate, dateType, amount);
dateString = dateToString(myDate, dateStyle);
}
return dateString;
}
/**
* 增加日期中某类型的某数值。如增加日期
*
* @param date 日期
* @param dateType 类型
* @param amount 数值
* @return 计算后日期
*/
private static Date addInteger(Date date, int dateType, int amount) {
Date myDate = null;
if (date != null) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(dateType, amount);
myDate = calendar.getTime();
}
return myDate;
}
/**
* 获取精确的日期
*
* @param timestamps 时间long集合
* @return 日期
*/
private static Date getAccurateDate(List<Long> timestamps) {
Date date = null;
long timestamp = 0;
Map<Long, long[]> map = new HashMap<>();
List<Long> absoluteValues = new ArrayList<>();
if (timestamps != null && timestamps.size() > 0) {
if (timestamps.size() > 1) {
for (int i = 0; i < timestamps.size(); i++) {
for (int j = i + 1; j < timestamps.size(); j++) {
long absoluteValue = Math.abs(timestamps.get(i) - timestamps.get(j));
absoluteValues.add(absoluteValue);
long[] timestampTmp = {timestamps.get(i), timestamps.get(j)};
map.put(absoluteValue, timestampTmp);
}
}
// 有可能有相等的情况。如2012-11和2012-11-01。时间戳是相等的。此时minAbsoluteValue为0
// 因此不能将minAbsoluteValue取默认值0
long minAbsoluteValue = -1;
if (!absoluteValues.isEmpty()) {
minAbsoluteValue = absoluteValues.get(0);
for (int i = 1; i < absoluteValues.size(); i++) {
if (minAbsoluteValue > absoluteValues.get(i)) {
minAbsoluteValue = absoluteValues.get(i);
}
}
}
if (minAbsoluteValue != -1) {
long[] timestampsLastTmp = map.get(minAbsoluteValue);
long dateOne = timestampsLastTmp[0];
long dateTwo = timestampsLastTmp[1];
if (absoluteValues.size() > 1) {
timestamp = Math.abs(dateOne) > Math.abs(dateTwo) ? dateOne : dateTwo;
}
}
} else {
timestamp = timestamps.get(0);
}
}
if (timestamp != 0) {
date = new Date(timestamp);
}
return date;
}
/**
* 判断字符串是否为日期字符串
*
* @param date 日期字符串
* @return true or false
*/
public static boolean isDate(String date) {
boolean isDate = false;
if (date != null) {
if (getDateStyle(date) != null) {
isDate = true;
}
}
return isDate;
}
/**
* 获取日期字符串的日期风格。失敗返回null。
*
* @param date 日期字符串
* @return 日期风格
*/
public static DateStyleEnum getDateStyle(String date) {
DateStyleEnum dateStyle = null;
Map<Long, DateStyleEnum> map = new HashMap<>();
List<Long> timestamps = new ArrayList<>();
for (DateStyleEnum style : DateStyleEnum.values()) {
if (style.isShowOnly()) {
continue;
}
Date dateTmp = null;
if (date != null) {
try {
ParsePosition pos = new ParsePosition(0);
dateTmp = getDateFormat(style.getValue()).parse(date, pos);
if (pos.getIndex() != date.length()) {
dateTmp = null;
}
} catch (Exception e) {
}
}
if (dateTmp != null) {
timestamps.add(dateTmp.getTime());
map.put(dateTmp.getTime(), style);
}
}
Date accurateDate = getAccurateDate(timestamps);
if (accurateDate != null) {
dateStyle = map.get(accurateDate.getTime());
}
return dateStyle;
}
/**
* 将日期字符串转化为日期。失败返回null。
*
* @param date 日期字符串
* @return 日期
*/
public static Date stringToDate(String date) {
DateStyleEnum dateStyle = getDateStyle(date);
return stringToDate(date, dateStyle);
}
/**
* 将日期字符串转化为日期。失败返回null。
*
* @param date 日期字符串
* @param pattern 日期格式
* @return 日期
*/
public sta
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
DB Adminer-navicat资源 (274个子文件)
amazeui.css 324KB
amazeui.flat.css 323KB
amazeui.flat.min.css 242KB
amazeui.min.css 241KB
bootstrap.min.css 118KB
index.css 24KB
bootstrap-editable.css 21KB
login_emoji.css 14KB
login.css 13KB
fw-ui.css 11KB
bootstrap-table.min.css 9KB
codemirror.css 9KB
jquery.contextMenu.css 7KB
jquery.contextMenu.min.css 6KB
db.css 2KB
sql.css 2KB
auth.css 2KB
simplescrollbars.css 1KB
show-hint.css 1024B
document-flow.css 1009B
fontawesome-webfont.eot 69KB
icomoon.eot 10KB
icomoon.eot 8KB
context-menu-icons.eot 3KB
html.ftl 21KB
login.ftl 12KB
index.ftl 11KB
user.ftl 10KB
operlog.ftl 8KB
edit.ftl 6KB
edit.ftl 6KB
add.ftl 5KB
add.ftl 5KB
add.ftl 5KB
password.ftl 5KB
detail.ftl 4KB
sql.ftl 4KB
detail.ftl 3KB
detail.ftl 3KB
auth.ftl 2KB
401.ftl 2KB
403.ftl 2KB
500.ftl 2KB
main.ftl 2KB
table.ftl 1KB
sequence.ftl 1KB
index.ftl 1KB
func.ftl 1KB
view.ftl 1KB
type.ftl 1KB
loading.gif 2KB
.gitignore 303B
favicon.ico 1KB
DateUtil.java 67KB
DamengJdbcService.java 18KB
PostgresqlJdbcService.java 17KB
MysqlJdbcService.java 16KB
StringUtils.java 13KB
JdbcBaseService.java 12KB
GlobalExceptionHandler.java 12KB
OperateLogAspect.java 8KB
HttpUtils.java 8KB
SQLParserUtils.java 8KB
WebMvcConfig.java 8KB
ExcelWidthStyleStrategy.java 6KB
DataSqlServiceImpl.java 6KB
IpUtils.java 5KB
SqlExecuteResult.java 5KB
RestfulResponseHandler.java 5KB
LoginController.java 4KB
DatabaseSqlController.java 4KB
OperUserServiceImpl.java 3KB
FwFreeMarkerViewResolver.java 3KB
AuthController.java 3KB
RequestUtils.java 3KB
DatabaseTableController.java 3KB
RestfulResponse.java 3KB
FieldValidateError.java 3KB
ConnectController.java 3KB
YamlUtils.java 3KB
OperLogServiceImpl.java 3KB
BizException.java 2KB
ConvertUtils.java 2KB
DatabaseSequenceController.java 2KB
DatabaseFuncController.java 2KB
DatabaseIndexController.java 2KB
DataTableServiceImpl.java 2KB
DatabaseViewController.java 2KB
DatabaseTypeController.java 2KB
Threads.java 2KB
ServletUtils.java 2KB
Connect.java 2KB
SaTokenConfigure.java 2KB
ThreadPoolConfig.java 2KB
ExceptionEnum.java 2KB
DatabaseController.java 2KB
SyslogController.java 2KB
ConnectHttp.java 2KB
SysUserController.java 2KB
IndexController.java 2KB
共 274 条
- 1
- 2
- 3
资源评论
xyq2024
- 粉丝: 2530
- 资源: 5474
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功