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工具类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程