- 创建spring-boot-dateutils-starter项目
springboot 自定义starter (日期格式转化starter) - 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;
}
}
- 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 {
}
- 创建 META-INF文件夹,并创建spring.factories文件
springboot 自定义starter (日期格式转化starter) - spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.zcy.starter.DateutilServiceConfiguration
- 使用maven install 打包jar 到本地仓库
springboot 自定义starter (日期格式转化starter) - 在其他项目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);
}
}
- 运行结果