ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA线程安全的DateUtil工具类

2021-09-27 17:02:58  阅读:262  来源: 互联网

标签:DateUtil JAVA param 线程 cal date return Calendar calendar


这里写自定义目录标题

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();
  }


}

标签:DateUtil,JAVA,param,线程,cal,date,return,Calendar,calendar
来源: https://blog.csdn.net/napcleon1/article/details/120511074

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有