springboot 自定义starter (日期格式转化starter)

  1. 创建spring-boot-dateutils-starter项目
    在这里插入图片描述
  2. pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.13.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.zcy</groupId>
    <artifactId>spring-boot-dateutils-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-dateutils-starter</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

    </dependencies>


</project>

3.DateutilServiceConfiguration.java

package com.zcy.starter;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author zhaochengyang
 * @version 1.0
 * @date 2020/4/1 18:11
 */
@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties(DateutilProperties.class)
public class DateutilServiceConfiguration {

    @Autowired
    DateutilProperties DateutilProperties;
    @Bean
    public DateutilService DateutilService(){
        DateutilService helloService =new DateutilService();


        return helloService;
    }
}

  1. DateutilService.java
package com.zcy.starter;


import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.util.StringUtils;

/**
 * @author zhaochengyang
 * @version 1.0
 * @date 2020/4/1 18:12
 */
public class DateutilService {
    private static final Logger log = LoggerFactory.getLogger(DateutilService.class);

    public DateutilProperties getDateutilspro() {
        return dateutilspro;
    }

    public void setDateutilspro(DateutilProperties dateutilspro) {
        this.dateutilspro = dateutilspro;
    }

    @Autowired
    private DateutilProperties dateutilspro;

    private static String[] dateFormat = { "yyyy-MM-dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss", "yyyy年MM月dd日HH时mm分ss秒",
            "yyyy-MM-dd", "yyyy/MM/dd", "yy-MM-dd", "yy/MM/dd", "yyyy年MM月dd日", "HH:mm:ss", "yyyyMMddHHmmss", "yyyyMMdd",
            "yyyy.MM.dd", "yy.MM.dd", "MMyyHHmdd", "yyMMddHH", "yyyy-MM" };

    public static Timestamp convUtilCalendarToSqlTimestamp(Calendar date) {
        if (date == null) {
            return null;
        }
        return new Timestamp(date.getTimeInMillis());
    }

    public static Calendar convSqlTimestampToUtilCalendar(Timestamp date) {
        if (date == null) {
            return null;
        }
        GregorianCalendar gc = new GregorianCalendar();
        gc.setTimeInMillis(date.getTime());
        return gc;
    }

    public Calendar parseDate(String dateStr) {
        if ((dateStr == null) || (dateStr.trim().length() == 0)) {
            return null;
        }
        Date result = parseDate(dateStr, 0);
        Calendar cal = Calendar.getInstance();
        cal.setTime(result);

        return cal;
    }

    /**
     * Timestamp 转化为 DateStr
     *
     * @param date
     * @param formatindex
     * @return
     */
    public String TimestampToDateStr(Timestamp date, int formatindex) {
        Calendar calendar = DateutilService.convSqlTimestampToUtilCalendar(date);
        return DateutilService.toDateStr(calendar, formatindex);
    }

    /**
     *
     * @param 参数1 要转换的字符串日期
     * @param 参数2 格式化类型 选填 默认为 yyyy-MM-dd
     * @return
     */
    public Date toDateFromString(String... args) {
        String ftype = "yyyy-MM-dd";
        Date dateTime = null;
        for (int i = 0; i < args.length; i++) {
            if (!StringUtils.isEmpty(args[1])) {
                ftype = args[1];
            }
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(ftype);
            try {
                dateTime = simpleDateFormat.parse(args[0]);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        return dateTime;
    }

    public static String toDateTimeStr(Calendar date) {
        if (date == null)
            return null;
        return new SimpleDateFormat(dateFormat[0]).format(date.getTime());
    }

    public static String toDateTimeStr(Calendar date, int format) {
        if (date == null)
            return null;
        return new SimpleDateFormat(dateFormat[format]).format(date.getTime());
    }

    public static String toDateTimeStr(int format, Calendar date) {
        if (date == null)
            return null;
        return new SimpleDateFormat(dateFormat[format]).format(date.getTime());
    }

    public static String toDateStr(Calendar date, int formatindex) {
        if (date == null)
            return null;
        return new SimpleDateFormat(dateFormat[formatindex]).format(date.getTime());
    }

    public static String toDateStrByFormatIndex(Calendar date, int formatIndex) {
        if (date == null)
            return null;
        return new SimpleDateFormat(dateFormat[formatIndex]).format(date.getTime());
    }

    public static int calendarMinus(Calendar d1, Calendar d2) {
        if ((d1 == null) || (d2 == null)) {
            return 0;
        }

        d1.set(11, 0);
        d1.set(12, 0);
        d1.set(13, 0);

        d2.set(11, 0);
        d2.set(12, 0);
        d2.set(13, 0);

        long t1 = d1.getTimeInMillis();
        long t2 = d2.getTimeInMillis();
        log.debug("DateUtils: d1 = " + toDateTimeStr(d1) + "(" + t1 + ")");

        log.debug("DateUtils: d2 = " + toDateTimeStr(d2) + "(" + t2 + ")");

        long daylong = 86400000L;
        t1 -= t1 % daylong;
        t2 -= t2 % daylong;

        long t = t1 - t2;
        int value = (int) (t / daylong);

        log.debug("DateUtils: d2 -d1 = " + value + " (天)");

        return value;
    }

    public static long calendarminus(Calendar d1, Calendar d2) {
        if ((d1 == null) || (d2 == null)) {
            return 0L;
        }
        return (d1.getTimeInMillis() - d2.getTimeInMillis()) / 86400000L;
    }

    public static Date parseDate(String dateStr, int index) {
        DateFormat df = null;
        try {
            df = new SimpleDateFormat(dateFormat[index]);

            return df.parse(dateStr);
        } catch (ParseException pe) {
            return parseDate(dateStr, index + 1);
        } catch (ArrayIndexOutOfBoundsException aioe) {
        }
        return null;
    }

    public static Date StringToDate(String dateStr) {
        if ((dateStr == null) || (dateStr.trim().length() == 0)) {
            return null;
        }
        return parseDate(dateStr, 3);
    }

    public static String dateToString(Date date, int index) {
        if (date == null) {
            return null;
        }
        return new SimpleDateFormat(dateFormat[index]).format(date);
    }

    public static String dateToString(Date date) {
        if (date == null) {
            return null;
        }
        return new SimpleDateFormat(dateFormat[3]).format(date);
    }

    public static Timestamp convUtilDateToSqlTimestamp(Date date) {
        if (date == null) {
            return null;
        }
        return new Timestamp(date.getTime());
    }

    public static Calendar convUtilDateToUtilCalendar(Date date) {
        if (date == null) {
            return null;
        }
        GregorianCalendar gc = new GregorianCalendar();
        gc.setTimeInMillis(date.getTime());
        return gc;
    }

    public static Timestamp parseTimestamp(String dateStr, int index) {
        DateFormat df = null;
        try {
            df = new SimpleDateFormat(dateFormat[index]);

            return new Timestamp(df.parse(dateStr).getTime());
        } catch (ParseException pe) {
            return new Timestamp(parseDate(dateStr, index + 1).getTime());
        } catch (ArrayIndexOutOfBoundsException aioe) {
        }
        return null;
    }

    public static Timestamp parseTimestamp(String dateStr) {
        DateFormat df = null;
        try {
            df = new SimpleDateFormat(dateFormat[3]);
            return new Timestamp(df.parse(dateStr).getTime());
        } catch (ParseException pe) {
            return null;
        } catch (ArrayIndexOutOfBoundsException aioe) {
        }
        return null;
    }

    /**
     *
     * @param dateStr
     * @return
     */
    public static Timestamp toTimestampdateFormat0(String dateStr) {
        DateFormat df = null;
        try {
            df = new SimpleDateFormat(dateFormat[0]);
            return new Timestamp(df.parse(dateStr).getTime());
        } catch (ParseException pe) {

            return null;

        } catch (ArrayIndexOutOfBoundsException aioe) {
        }
        return null;
    }

    /**
     * 根据formatIndex 返回
     *
     * @param dateStr
     * @param formatIndex
     * @return
     */
    public static Timestamp toTimestampdateByformatIndex(String dateStr, int formatIndex) {
        DateFormat df = null;
        try {
            df = new SimpleDateFormat(dateFormat[formatIndex]);
            return new Timestamp(df.parse(dateStr).getTime());
        } catch (ParseException pe) {

            return null;

        } catch (ArrayIndexOutOfBoundsException aioe) {
        }
        return null;
    }

    /**
     * 得到当前日期
     *
     * @param a           为0为当前时间 相差a天
     * @param formatIndex 格式
     * @return
     */
    public static String getNowDate(int a, int formatIndex) {
        Date date = new Date();
        DateFormat df = null;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int day = c.get(Calendar.DATE);
        c.set(Calendar.DATE, day + a);
        df = new SimpleDateFormat(dateFormat[formatIndex]);
        // Calendar.
        return df.format(c.getTime());
    }

    public static Timestamp parseTimestampYYMMDDHHMMSS(String dateStr) {
        DateFormat df = null;
        try {
            df = new SimpleDateFormat(dateFormat[9]);
            return new Timestamp(df.parse(dateStr).getTime());
        } catch (ParseException pe) {
            return null;
        } catch (ArrayIndexOutOfBoundsException aioe) {
        }
        return null;
    }

    public static Timestamp parseTimestamp(Calendar calendar) {
        return new Timestamp(calendar.getTimeInMillis());
    }

    public static int calcMonthDays(Calendar date) {
        Calendar t1 = (Calendar) date.clone();
        Calendar t2 = (Calendar) date.clone();
        int year = date.get(1);
        int month = date.get(2);
        t1.set(year, month, 1);
        t2.set(year, month + 1, 1);
        t2.add(6, -1);
        return calendarMinus(t2, t1) + 1;
    }

    /**
     * 取指定日期的相差 a天数的日期
     *
     * @param date
     * @param a
     * @return
     */
    public static Date getBeforOrNextDay(Date date, int a) {
        if (date == null) {
            return null;
        } else {
            Calendar c = Calendar.getInstance();
            c.setTime(date);
            int day = c.get(Calendar.DATE);
            c.set(Calendar.DATE, day + a);
            // SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
            // System.out.println("取得的日期是:---->>>>>"+df.format(c.getTime()));

            return c.getTime();
        }

    }

    public static void main(String[] args) {
//	  char[] charArray = "我爱北京天安门".toCharArray();
//	  for(int i=0;i<charArray.length;i++){
//		  System.out.println("i==="+charArray[i]);
//	  }
        int a = 0;
        a = 3 / 20;

        System.out.println("a===" + a);
    }

    /**
     * 取指定日期所在月的最后一天
     *
     * @param strdate
     * @return
     */
    public static String getMonthLastDay(String strdate) {
        Date date = StringToDate(getMonthFirstDay(strdate));
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, 1);
        calendar.add(Calendar.DAY_OF_YEAR, -1);

        return formatDateByFormat(calendar.getTime(), "yyyy-MM-dd");
    }

    // 得到下个月的15号
    public static String getNextMonth15(String strdate) {

        Date date = StringToDate(getMonthFirstDay(strdate));
//	   System.out.println("strdate-------------"+strdate);
//	   System.out.println("date-------------"+date);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, 1);
        calendar.add(Calendar.DAY_OF_YEAR, 14);

        return formatDateByFormat(calendar.getTime(), "yyyy-MM-dd");

    }

    // 得到下个月的最后一天
    public static String getNextMonthLastDay(String strdate) {

        Date date = StringToDate(getMonthFirstDay(strdate));
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, 2);
        calendar.add(Calendar.DAY_OF_YEAR, -1);

        return formatDateByFormat(calendar.getTime(), "yyyy-MM-dd");

    }

    // 得到下下个月的30号
    public static String getNext2Month15Day(String strdate) {

        Date date = StringToDate(getMonthFirstDay(strdate));
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, 2);
        calendar.add(Calendar.DAY_OF_YEAR, 14);

        return formatDateByFormat(calendar.getTime(), "yyyy-MM-dd");

    }

    //得到下下个月最后一天
    public static String getNext2MonthLastDay(String strdate) {

        Date date = StringToDate(getMonthFirstDay(strdate));
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, 3);
        calendar.add(Calendar.DAY_OF_YEAR, -1);

        return formatDateByFormat(calendar.getTime(), "yyyy-MM-dd");

    }

    /**
     * 取指定日期所在月的第一天
     *
     * @param strdate
     * @return
     */
    public static String getMonthFirstDay(String strdate) {
        java.util.Date date = StringToDate((strdate));

        return formatDateByFormat(date, "yyyy-MM") + "-01";
    }

    public static String formatDateByFormat(Date date, String format) {
        String result = "";
        if (date != null) {
            try {
                SimpleDateFormat sdf = new SimpleDateFormat(format);
                result = sdf.format(date);
            } catch (Exception ex) {

                ex.printStackTrace();
            }
        }
        return result;
    }

    // 得到前 - addmoth月或者下+addmoth月的当前时间
    public static Date getLastMonOrNextMonTime(Date today, int addmoth) {

        Calendar cal = Calendar.getInstance();
        cal.setTime(today);
        cal.add(Calendar.DATE, -1); // 得到前一天
        cal.add(Calendar.MONTH, addmoth); // 得到前一个月
        return cal.getTime();
    }

    // 两个时间相差的天数
    public static int getDistanceDays(Date day1, Date day2) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(day1);
        int num1 = cal.get(Calendar.DATE);
        cal.setTime(day2);
        int num2 = cal.get(Calendar.DATE);
        return num1 - num2;
    }

    public static void main1(String[] args) {
        // sendMail("[email protected]", "[email protected],[email protected]", "测试邮件",
        // "这是一封测试的邮件");
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.getTimeInMillis());
    }

    public static long getTimeInMillis() {
        Calendar cal = Calendar.getInstance();
        return cal.getTimeInMillis();
    }

    /**
     * 得到比date 多 或 少 a分钟的时间
     *
     * @param a
     * @param formatIndex
     * @return
     */
    public static String getNextMinute(Date date, int a, int formatIndex) {
        // Date date = new Date();
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE), c.get(Calendar.HOUR_OF_DAY),
                c.get(Calendar.MINUTE) + a, c.get(Calendar.SECOND));
        DateFormat df = new SimpleDateFormat(dateFormat[formatIndex]);
        return df.format(c.getTime());

    }

    /**
     * 取本周7天的第一天(周一的日期)
     */
    public static String getNowWeekBegin() {
        int mondayPlus;
        Calendar cd = Calendar.getInstance();
        // 获得今天是一周的第几天,星期日是第一天,星期二是第二天......
        int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1; // 因为按中国礼拜一作为第一天所以这里减1
        if (dayOfWeek == 1) {
            mondayPlus = 0;
        } else {
            mondayPlus = 1 - dayOfWeek;
        }
        GregorianCalendar currentDate = new GregorianCalendar();
        currentDate.add(GregorianCalendar.DATE, mondayPlus);
        Date monday = currentDate.getTime();

        DateFormat df = DateFormat.getDateInstance();
        String preMonday = df.format(monday);

        return preMonday;// + " 00:00:00"

    }

    /**
     * 取得两个时间的差距的天数
     *
     * @param date1
     * @param date2
     * @return
     */
    public static int daysBetween(Date date1, Date date2)

    {

        Calendar cal = Calendar.getInstance();

        cal.setTime(date1);

        long time1 = cal.getTimeInMillis();

        cal.setTime(date2);

        long time2 = cal.getTimeInMillis();

        long between_days = (time2 - time1) / (1000 * 3600 * 24);

        return Integer.parseInt(String.valueOf(between_days));

    }
}

5.DateutilProperties.java

package com.zcy.starter;

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 1. @author zhaochengyang
 2. @version 1.0
 3. @date 2020/4/1 18:12
 */
@ConfigurationProperties(prefix ="com.zcy.datepro")
public class DateutilProperties {
}
  1. 创建 META-INF文件夹,并创建spring.factories文件
    在这里插入图片描述
  2. spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.zcy.starter.DateutilServiceConfiguration
  1. 使用mavan install 打包jar 到本地仓库
    在这里插入图片描述
  2. 在其他项目pom.xml中引入自定义的日期格式转化starter
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.13.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com</groupId>
    <artifactId>spting-stater</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spting-stater</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--引入自定义的starter-->

        <dependency>
            <groupId>com.zcy</groupId>
            <artifactId>spring-boot-dateutils-starter</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

  • TestController.java
package com.sptingstater.controller;

import com.zcy.starter.DateutilService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

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


/**
 * @author zhaochengyang
 * @version 1.0
 * @date 2020/4/1 17:44
 */


@RestController
public class TestController {

    @Autowired
    DateutilService dateutilService;

    @GetMapping("/getdate")
    public String toString() {
        Date date = new Date();


        return DateutilService.dateToString(date,1);
    }
}

  1. 运行结果

在这里插入图片描述

发布了10 篇原创文章 · 获赞 10 · 访问量 1723

猜你喜欢

转载自blog.csdn.net/lmsfv/article/details/105317834
今日推荐