 package com.mcwl.common.utils;

import com.alibaba.fastjson2.util.DateUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

 public class ToDateUtils {
     /** 时间格式：yyyyMMddHHmmss'. */
     public static String DEFAULT_PATTERN = "yyyyMMddHHmmss";

     /** 时间格式：yyyyMMdd'. */
     public static String yyyyMMdd = "yyyyMMdd";

     /** 时间格式：yyyy-MM-dd'. */
     public static String yyyy_MM_dd = "yyyy-MM-dd";

     /** 时间格式：HH:mm:ss'. */
     public static String HH_mm_ss = "HH:mm:ss";

     /** 时间格式：yyyy-MM-dd' 'HH:mm:ss'. */
     public static String yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd' 'HH:mm:ss";

     /** 时间格式：yyyy-MM-dd' 'HH:mm'. */
     public static String yyyy_MM_dd_HH_mm = "yyyy-MM-dd' 'HH:mm";

     /**
      * 获取当前时间(格式:yyyyMMddHHmmss)
      *
      * @return
      */
     public static String getCurrDate() {
         return getCurrDate(DEFAULT_PATTERN);
     }

     /**
      * 字符串转日期，默认格式为yyyyMMddHHmmss
      *
      * @param str
      * @return
      */
     public static Date strToDate(String str) {
         return strToDate(str, DEFAULT_PATTERN);
     }

     /**
      * 日期格式化，默认格式为yyyyMMddHHmmss
      *
      * @param date
      *            日期
      * @return
      */
     public static String format(Date date) {
         return DateUtils.format(date, DEFAULT_PATTERN);
     }

     /**
      * 字符串转日期
      *
      * @param str
      *            时间
      * @param pattern
      *            格式
      * @return
      */
     public static Date strToDate(String str, String pattern) {
         SimpleDateFormat format = new SimpleDateFormat(pattern);
         Date date = null;
         try {
             date = format.parse(str);
         } catch (ParseException e) {
             e.printStackTrace();
         }
         return date;
     }

     /**
      * 日期格式化
      *
      * @param date
      *            日期
      * @param pattern
      *            格式
      * @return
      */
     public static String format(Date date, String pattern) {
         SimpleDateFormat sdf = new SimpleDateFormat(pattern);

         return sdf.format(date);
     }

     /**
      * 获取当前时间
      *
      * @param pattern
      *            格式
      * @return
      */
     public static String getCurrDate(String pattern) {
         long d = System.currentTimeMillis();
         Date date = new Date(d);

         return format(date, pattern);
     }

     /**
      * 获取系统当前时间
      *
      * @return
      */
     public static Date getSystemDate() {
         long d = System.currentTimeMillis();
         Date date = new Date(d);

         return date;
     }

     /**
      * 格式化时间
      *
      * @param strTime
      * @param pattern
      * @return
      */
     public static String getTime(String strTime, String pattern) {
         SimpleDateFormat s = new SimpleDateFormat(pattern);
         try {
             return String.valueOf(s.parse(strTime).getTime());// 时间戳
         } catch (ParseException e) {
             e.printStackTrace();
             return String.valueOf(new Date().getTime());
         }
     }

     /**
      * 格式化日期格式
      *
      * @param date
      * @param mask
      * @return
      */
     public static final String date2string(Date date, String style) {
         SimpleDateFormat sdf = new SimpleDateFormat(style);
         return sdf.format(date);
     }

     /**
      * 获取本地日期时间.
      *
      * @return 本地日期时间yyyyMMddHHmmss
      */
     public static String getLocalFullDateTime14() {
         return date2string(new Date(), DEFAULT_PATTERN);
     }


     /**
      * 返回指定格式时间
      * @param mask
      * @return
      */
     public static final String now2string(String mask){
         return date2string(new Date(), mask);
     }

        /**
      *
      * @param date
      * @param field
      * @param amount
      * @return 对指定的日期做加减运算；<br>
      *         减：add(new Date(), Calendar.DATE, -1)返回昨天的日期<br>
      *         加：add(new Date(), Calendar.YEAR, 1)返回一年后的今天
      */
     public static Date add(Date date, int field, int amount) {
         Calendar c = Calendar.getInstance();
         c.setTime(date);
         c.add(field, amount);
         return c.getTime();
     }


     /**
      * 返回需要格式的字符串时间
      * @param str  字符串时间
      * @param patternS   字符串格式
      * @param patternE   格式化后的格式
      * @return
      */
     public static String strToStr(String str, String patternS,String patternE){

         return format(strToDate(str,patternS),patternE);

     }
 }
