JAVA线程安全的DateUtil工具类
2021/9/27 17:10:52
本文主要是介绍JAVA线程安全的DateUtil工具类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这里写自定义目录标题
- JAVA线程安全的DateUtil工具类
JAVA线程安全的DateUtil工具类
下一篇 字符串处理工具类
package com.github.niupengyu.core.util; import org.omg.CORBA.Object; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; public class ThreadLocalDateUtil { private ThreadLocalDateUtil() { } /** * 初始化部分格式 */ private static final String[] date_format = new String[]{"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "dd"}; private static ThreadLocal<Map<String, DateFormat>> threadLocal = new ThreadLocal<>(); static{ Map<String, DateFormat> df = new HashMap<>(); df.put(date_format[0],new SimpleDateFormat(date_format[0])); df.put(date_format[1],new SimpleDateFormat(date_format[1])); df.put(date_format[2],new SimpleDateFormat(date_format[2])); threadLocal.set(df); } /** * 获取时间格式 * @param key * @return */ public static DateFormat getDateFormat(String key) { Map<String, DateFormat> df = threadLocal.get(); if(!df.containsKey(key)){ df.put(key,new SimpleDateFormat(key)); } return df.get(key); } /** * 获取一个时间字符串 自定义时分秒 * @param date 时间 * @param hour 小时 * @param min 分组 * @param sec 秒 * @param key 格式 * @return */ public static String getDateString(Date date, int hour, int min, int sec,String key) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, hour); cal.set(Calendar.MINUTE, min); cal.set(Calendar.SECOND, sec); return getDateFormat(key).format(cal.getTime()); } /** * 获取一个时间 自定义时分秒 * @param date 时间 * @param hour 小时 * @param min 分钟 * @param sec 秒 * @return 时间 */ public static Date getDate(Date date, int hour, int min, int sec) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, hour); cal.set(Calendar.MINUTE, min); cal.set(Calendar.SECOND, sec); return cal.getTime(); } /** * 获取一个自定义的时间 * @param year 年 * @param month 月 * @param day 日 * @param hour 时 * @param min 分 * @param sec 秒 * @param mi 毫秒 * @return 时间 */ public static Date getDate(int year, int month, int day, int hour, int min, int sec, int mi) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month - 1); cal.set(Calendar.DAY_OF_MONTH, day); cal.set(Calendar.HOUR_OF_DAY, hour); cal.set(Calendar.MINUTE, min); cal.set(Calendar.SECOND, sec); cal.set(Calendar.MILLISECOND, mi); return cal.getTime(); } /** * 将时间转换成 年月日格式字符串 * @param date * @return */ public static String formatDate(Date date){ if(date==null){ return ""; } return getDateFormat(date_format[0]).format(date); } /** * 将;一个时间对象转换成 年月日字符串 * @param obj 时间对象 * @return */ public static String formatDate(Object obj){ if(obj instanceof Date){ return getDateFormat(date_format[0]).format(obj); } return ""; } /** * 将一个 时间对象转换成 任意指定格式的字符串 * @param obj 时间对象 * @param key 格式 * @return */ public static String formatDate(Object obj,String key){ if(obj instanceof Date){ return getDateFormat(key).format(obj); } return ""; } /** * 将时间转换成 年月日时分秒 格式的字符串 * @param date 时间 * @return */ public static String formatDateTime(Date date){ return getDateFormat(date_format[1]).format(date); } /** * 将时间对象转换成年月日时分秒格式字符串 * @param obj 时间对象 * @return */ public static String formatDateTime(Object obj){ if(obj instanceof Date){ return getDateFormat(date_format[1]).format(obj); } return ""; } /** * 将时间转换成指定格式的字符串 * @param date 时间格式 * @param i 格式 * @return */ public static String formatDate(Date date, String i){ return getDateFormat(i).format(date); } /** * 将字符串格式转换为时间格式 * @param strDate 时间字符串 * @param i 格式 * @return */ public static Date parse(String strDate, String i){ try { return getDateFormat(i).parse(strDate); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 获取一个时间 指定日期 和格式 * @param i 天 * @param j 格式 * @return * @throws ParseException */ public static String getNextDay(int i, String j) throws ParseException { Date date = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, i); date = calendar.getTime(); return ThreadLocalDateUtil.formatDate(date, j); } /** * 获取一个时间 指定 时间 日期 和格式 * @param date 时间 * @param i 天 * @param j 格式 * @return * @throws ParseException */ public static String getNextDay(Date date, int i, String j) throws ParseException { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, i); date = calendar.getTime(); return ThreadLocalDateUtil.formatDate(date, j); } /** * 获取一个时间 指定 时间和格式 * @param date * @param i * @return * @throws ParseException */ public static Date getNextDate(Date date, int i) throws ParseException { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, i); date = calendar.getTime(); return date; } /** * 获取一个时间 指定天数 * @param i * @return * @throws ParseException */ public static Date getNextDate(int i) throws ParseException { Date date = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, i); date = calendar.getTime(); return date; } public static boolean isNull(String str) { return str == null || "".equals(str) || "null".equals(str); } public static boolean isNull(Object str) { return str == null || isNull(str.toString()); } public static String strvalueOf(String str) { if (isNull(str)) { return ""; } return str; } public static String intvalueOf(String str) { if (isNull(str)) { return "0"; } return str; } /** * 将时间转换为可读字符串 * @param ms 毫秒数 * @return */ public static String getTimeDes(long ms) { int ss = 1000; int mi = ss * 60; int hh = mi * 60; int dd = hh * 24; long day = ms / dd; long hour = (ms - day * dd) / hh; long minute = (ms - day * dd - hour * hh) / mi; long second = (ms - day * dd - hour * hh - minute * mi) / ss; long milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss; StringBuilder str = new StringBuilder(); if (day > 365 * 100) { str.append(day / (365 * 100)).append("世纪"); } else if (day > 365) { str.append(day / 365).append("年"); } else if (day > 0) { str.append(day).append("天"); } else if (hour > 0) { str.append(hour).append("小时"); } else if (minute > 0) { str.append(minute).append("分钟"); } else if (second > 0) { str.append(second).append("秒"); } else if (milliSecond > 0) { str.append(1).append("秒"); } return str.toString(); } /** * 获取上周五时间 */ public static Date lastFirday() { //作用防止周日得到本周日期 Calendar calendar = Calendar.getInstance(); while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) { calendar.add(Calendar.DAY_OF_WEEK, -1); } int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; int offset = 7 - dayOfWeek; calendar.add(Calendar.DATE, offset - 9); return getFirstDayOfWeek(calendar.getTime(), 6);//这是从上周日开始数的到本周五为6 } /** * 获取上周一时间 */ public static Date lastMonday() { Calendar calendar = Calendar.getInstance(); while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) { calendar.add(Calendar.DAY_OF_WEEK, -1); } int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; int offset = 1 - dayOfWeek; calendar.add(Calendar.DATE, offset - 7); return getFirstDayOfWeek(calendar.getTime(), 2); } /** * 得到某一天的该星期的第一日 00:00:00 * * @param firstDayOfWeek 一个星期的第一天为星期几 */ public static Date getFirstDayOfWeek(Date date, int firstDayOfWeek) { Calendar cal = Calendar.getInstance(); if (date != null) { cal.setTime(date); } cal.setFirstDayOfWeek(firstDayOfWeek);//设置一星期的第一天是哪一天 cal.set(Calendar.DAY_OF_WEEK, firstDayOfWeek);//指示一个星期中的某天 cal.set(Calendar.HOUR_OF_DAY, 0);//指示一天中的小时。HOUR_OF_DAY 用于 24 小时制时钟。例如,在 10:04:15.250 PM 这一时刻,HOUR_OF_DAY 为 22。 cal.set(Calendar.MINUTE, 0);//指示一小时中的分钟。例如,在 10:04:15.250 PM 这一时刻,MINUTE 为 4。 cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal.getTime(); } }
这篇关于JAVA线程安全的DateUtil工具类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南