基础工具类
你好!今天起陆续总结日常使用到的工具类,第一篇和时间格式转换相关。
LocalDateTime与str的转换工具类
package com.taylor.common.util;
import org.apache.commons.lang3.StringUtils;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
/**
* 报文字段LocalDateTime与str的转换工具类
*
* @author taylor
* @create 2019/12/24 11:54
*/
public class TimeFormatUtil {
/**
* 日期formatter
*/
private static DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
/**
* 时间formatter
*/
private static DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
private static DateTimeFormatter voFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static DateTimeFormatter voMsFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
private static DateTimeFormatter isoFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
/**
* 带毫秒的时间formatter
* jdk1.8中DateTimeFormatter在解析带毫秒的时间字符串「yyyyMMddHHmmssSSS」时有bug
* https://bugs.openjdk.java.net/browse/JDK-8031085
* jdk1.9中该问题已修复,目前使用DateTimeFormatterBuilder来处理毫秒问题
*/
private static DateTimeFormatter MSTimeFormatter = new DateTimeFormatterBuilder()
.appendPattern("yyyyMMddHHmmss")
.appendValue(ChronoField.MILLI_OF_SECOND, 3)
.toFormatter();
/**
* LocalDate转换为「yyyyMMdd」格式的字符串
*
* @param date 日期
* @return formatStr
*/
public static String formatDateToStr(LocalDate date) {
if (date == null) {
return null;
}
return dateFormatter.format(date);
}
/**
* LocalDateTime转换为「yyyyMMddHHmmss」格式的字符串
*
* @param time 时间
* @return formatStr
*/
public static String formatTimeToStr(LocalDateTime time) {
if (time == null) {
return null;
}
return timeFormatter.format(time);
}
/**
* LocalDateTime转换为「yyyyMMddHHmmssSSS」格式的字符串
*
* @param time 时间
* @return formatStr
*/
public static String formatMSTimeToStr(LocalDateTime time) {
if (time == null) {
return null;
}
return MSTimeFormatter.format(time);
}
/**
* 解析「yyyyMMdd」格式的时间字符串为LocalDate
*
* @param dateStr 日期字符串
* @return LocalDate
*/
public static LocalDate parseStrToDate(String dateStr) {
if (StringUtils.isBlank(dateStr)) {
return null;
}
return LocalDate.parse(dateStr, dateFormatter);
}
/**
* 解析「yyyyMMddHHmmss」格式的时间字符串为LocalDateTime
*
* @param timeStr 时间字符串
* @return LocalDateTime
*/
public static LocalDateTime parseStrToTime(String timeStr) {
if (StringUtils.isBlank(timeStr)) {
return null;
}
return LocalDateTime.parse(timeStr, timeFormatter);
}
/**
* 解析「yyyyMMddHHmmssSSS」格式的时间字符串为LocalDateTime
*
* @param timeStr 时间字符串
* @return LocalDateTime
*/
public static LocalDateTime parseStrToMSTime(String timeStr) {
if (StringUtils.isBlank(timeStr)) {
return null;
}
return LocalDateTime.parse(timeStr, MSTimeFormatter);
}
/**
* 报文时间字符串转换为ISO_LOCAL_DATE_TIME格式字符串,用于前端显示
*
* @param time 报文时间字符串,格式YYYYMMDDhhmmss
* @return java.lang.String ISO_LOCAL_DATE_TIME格式字符串
*/
public static String convertTimeToISOLocalDateTime(String time) {
LocalDateTime localDateTime = LocalDateTime.parse(time, timeFormatter);
return localDateTime.format(voFormatter);
}
/**
* 带毫秒报文时间字符串转换为ISO_LOCAL_DATE_TIME格式字符串,用于前端显示
*
* @param time 带毫秒报文时间字符串,格式:yyyyMMddHHmmssfff
* @return java.lang.String ISO_LOCAL_DATE_TIME格式字符串
*/
public static String convertMSTimeToISOLocalDateTime(String time) {
LocalDateTime localDateTime = LocalDateTime.parse(time, MSTimeFormatter);
return localDateTime.format(voMsFormatter);
}
public static LocalDateTime convertISOStrTimeToLocalDateTime(String timeStr) {
if (StringUtils.isEmpty(timeStr)) {
return null;
}
return LocalDateTime.parse(timeStr, voMsFormatter);
}
}
xml字段LocalDateTime/LocalDate与str的转换工具类
/**
* 描述: LocalDate转换
* 创建时间:2020年04月24日
*/
package com.taylor.message.window.serializer;
import org.apache.commons.lang3.StringUtils;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* 类用途:LocalDate转换 金关二期报文规范中的date/datetime类型
*
* @author taylor
* @version [V1.0, 2020年04月24日]
* @since [海关报文解析/金关二期]
*/
public class JaxbLocalDateSerializer extends XmlAdapter<String, LocalDate> {
private static DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@Override
public LocalDate unmarshal(String v) throws Exception {
if (StringUtils.isBlank(v)) {
return null;
}
return LocalDate.parse(v, dateFormatter);
}
@Override
public String marshal(LocalDate v) throws Exception {
if (v == null) {
return null;
}
return dateFormatter.format(v);
}
}
public class JaxbLocalDateSimpleSerializer extends XmlAdapter<String, LocalDate> {
private static DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
@Override
public LocalDate unmarshal(String v) throws Exception {
if (StringUtils.isBlank(v)) {
return null;
}
return LocalDate.parse(v, dateFormatter);
}
@Override
public String marshal(LocalDate v) throws Exception {
if (v == null) {
return null;
}
return dateFormatter.format(v);
}
}
public class JaxbLocalDateTimeSerializer extends XmlAdapter<String, LocalDateTime> {
private static DateTimeFormatter voFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Override
public LocalDateTime unmarshal(String v) throws Exception {
if (StringUtils.isBlank(v)) {
return null;
}
return LocalDateTime.parse(v, voFormatter);
}
@Override
public String marshal(LocalDateTime v) throws Exception {
if (v == null) {
return null;
}
return voFormatter.format(v);
}
}
public class JaxbLocalDateTimeSimpleSerializer extends XmlAdapter<String, LocalDateTime> {
private static DateTimeFormatter voFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
@Override
public LocalDateTime unmarshal(String v) throws Exception {
if (StringUtils.isBlank(v)) {
return null;
}
return LocalDateTime.parse(v, voFormatter);
}
@Override
public String marshal(LocalDateTime v) throws Exception {
if (v == null) {
return null;
}
return voFormatter.format(v);
}
}