- 一、来由
- 二、说明
- 三、实现
- 四、测试
- 五、测试结果
- 六、注意
每次遇到时间转换问题,总要去翻一翻浏览器,虽然很简单,但就是记不住,于是抽时间自己写了一个比较常用的时间转换工具类,以后直接copy过来用,以后有空再补充一些新的内容。
二、说明所有方法实现中的参数,都做了非空校验
三、实现package com.example.bean;
import org.springframework.util.StringUtils;
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 DateCovertUtil {
private DateCovertUtil(){};
public static String dateToString(Date date){
if (date == null){
throw new RuntimeException("date参数为空");
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}
public static String dateToStringCustomizing(Date date,String formatString){
if (date == null || StringUtils.isEmpty(formatString)){
throw new RuntimeException("参数为空,参数date:"+date+" formatString:"+formatString);
}
try {
SimpleDateFormat sdf = new SimpleDateFormat(formatString);
return sdf.format(date);
}catch (Exception e){
throw new RuntimeException("日期格式化设置错误:"+formatString);
}
}
public static Date stringToDate(String dateStr) {
if (StringUtils.isEmpty(dateStr)){
throw new RuntimeException("日期字符串为空");
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date;
try {
date = sdf.parse(dateStr);
}catch (ParseException e){
throw new RuntimeException("字符串转日期异常,字符串:"+dateStr);
}
return date;
}
public static Date stringToDateCustomizing(String dateStr,String formatString) {
if (StringUtils.isEmpty(dateStr) || StringUtils.isEmpty(formatString)){
throw new RuntimeException("参数为空,dateStr:"+dateStr+" formatString:"+formatString);
}
SimpleDateFormat sdf = new SimpleDateFormat(formatString);
Date date;
try {
date = sdf.parse(dateStr);
}catch (ParseException e){
throw new RuntimeException("自定义字符串转日期异常,字符串:"+dateStr+" 日期格式:"+formatString);
}
return date;
}
public static Calendar dateToCalendar(Date date) {
if (date == null){
throw new RuntimeException("date参数为空");
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
public static Date calendarToDate(Calendar calendar) {
if (calendar == null){
throw new RuntimeException("calendar参数为空");
}
return calendar.getTime();
}
public static String calendarToString(Calendar calendar) {
return dateToString(calendarToDate(calendar));
}
public static Calendar StringToCalendar(String dateString) {
return dateToCalendar(stringToDate(dateString));
}
public static Map dateGetDetail(Date date){
Map map = new HashMap<>();
if (date == null){
throw new RuntimeException("date参数为空");
}
Calendar calendar = dateToCalendar(date);
if (calendar.get(Calendar.YEAR) != 0) { map.put("year", calendar.get(Calendar.YEAR)); }
if (calendar.get(Calendar.MONTH) != 0) { map.put("month",calendar.get(Calendar.MONTH)+1); }
if (calendar.get(Calendar.DATE) != 0) { map.put("day",calendar.get(Calendar.DATE)); }
//12小时制
if (calendar.get(Calendar.HOUR) != 0) { map.put("hour",calendar.get(Calendar.HOUR)); }
if (calendar.get(Calendar.MINUTE) != 0) { map.put("minute",calendar.get(Calendar.MINUTE)); }
if (calendar.get(Calendar.SECOND) != 0) { map.put("second",calendar.get(Calendar.SECOND)); }
//24小时制
if (calendar.get(Calendar.HOUR_OF_DAY) != 0) { map.put("hourOfDay",calendar.get(Calendar.HOUR_OF_DAY)); }
//一周的第几天
if (calendar.get(Calendar.DAY_OF_WEEK) != 0) { map.put("dayOfWeek",calendar.get(Calendar.DAY_OF_WEEK)); }
return map;
}
public static long getCurrentTimeMillis(){
return System.currentTimeMillis();
}
}
四、测试
package com.example.bean;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
public class Test {
public static void main(String[] args) {
//参数准备
Date date = new Date();
Calendar calendar = Calendar.getInstance();
String dateStr = "2021-10-11 20:19:37";
//Date类型转String类型
String string1 = DateCovertUtil.dateToString(date);
System.out.println("Date类型转String类型:n" + string1);
//Date类型转String类型,自定义转换格式
String string2 = DateCovertUtil.dateToStringCustomizing(date, "yyyy-MM-dd");
System.out.println("nDate类型转String类型,自定义转换格式:n" + string2);
//String类型转Date类型
Date date1 = DateCovertUtil.stringToDate(dateStr);
System.out.println("nString类型转Date类型:n"+date1);
//String类型转Date类型,自定义转换格式
Date date2 = DateCovertUtil.stringToDateCustomizing(dateStr, "yyyy-MM-dd");
System.out.println("nString类型转Date类型,自定义转换格式:n" + date2);
//Date类型转Calendar类型
Calendar calendar1 = DateCovertUtil.dateToCalendar(date);
System.out.println("nDate类型转Calendar类型:n" + calendar1);
//Calendar类型转Date类型
Date date3 = DateCovertUtil.calendarToDate(calendar);
System.out.println("nCalendar类型转Date类型:n" + date3);
//Date类型获取年月日时分秒
Map dateMap = DateCovertUtil.dateGetDetail(date);
System.out.println("nDate类型获取年月日时分秒:n" + dateMap);
}
}
五、测试结果
六、注意
阿里规范中要求代码禁用 static 修饰 SimpleDateFormat,因为SimpleDateFormat是线程不安全的,所以涉及到了多线程可以使用DateTimeFormatter
具体请参考链接: https://blog.csdn.net/afreon/article/details/111878486



