Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataDeclaration
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
黄夏豪
dataDeclaration
Commits
77d82ffc
提交
77d82ffc
authored
5月 23, 2021
作者:
黄夏豪
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[数据模型] 改了一些bug
上级
43a4b9de
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
260 行增加
和
0 行删除
+260
-0
Java8TimeConfig.java
src/main/java/com/tykj/base/config/Java8TimeConfig.java
+134
-0
DateFormatUtil.java
src/main/java/com/tykj/base/util/DateFormatUtil.java
+123
-0
application.yml
src/main/resources/application.yml
+3
-0
没有找到文件。
src/main/java/com/tykj/base/config/Java8TimeConfig.java
0 → 100644
浏览文件 @
77d82ffc
package
com
.
tykj
.
base
.
config
;
import
com.fasterxml.jackson.core.JsonGenerator
;
import
com.fasterxml.jackson.core.JsonParser
;
import
com.fasterxml.jackson.databind.*
;
import
com.fasterxml.jackson.databind.ser.std.DateSerializer
;
import
com.fasterxml.jackson.datatype.jdk8.Jdk8Module
;
import
com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
;
import
com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer
;
import
com.fasterxml.jackson.module.paramnames.ParameterNamesModule
;
import
com.tykj.base.util.DateFormatUtil
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
java.io.IOException
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.time.Instant
;
import
java.time.LocalDateTime
;
import
java.time.ZoneId
;
import
java.time.format.DateTimeFormatter
;
import
java.util.Date
;
/**
* 描述:使jackson能够正确的接收时间格式
* @author HuangXiahao
* @version V1.0
* @class Java8TimeConfig
* @packageName com.example.personnelmanager.common.config
* @data 2020/5/20
**/
@Configuration
public
class
Java8TimeConfig
{
@Value
(
"${spring.jackson.date-format}"
)
private
String
formatValue
;
@Bean
(
name
=
"format"
)
DateTimeFormatter
format
()
{
return
DateTimeFormatter
.
ofPattern
(
formatValue
);
}
@Bean
public
ObjectMapper
serializingObjectMapper
(
@Qualifier
(
"format"
)
DateTimeFormatter
format
)
{
JavaTimeModule
javaTimeModule
=
new
JavaTimeModule
();
javaTimeModule
.
addSerializer
(
LocalDateTime
.
class
,
new
LocalDateTimeSerializer
(
format
));
javaTimeModule
.
addSerializer
(
Instant
.
class
,
new
InstantCustomSerializer
(
format
));
javaTimeModule
.
addSerializer
(
Date
.
class
,
new
DateSerializer
(
false
,
new
SimpleDateFormat
(
formatValue
)));
javaTimeModule
.
addDeserializer
(
Instant
.
class
,
new
InstantCustomDeserializer
());
javaTimeModule
.
addDeserializer
(
Date
.
class
,
new
DateCustomDeserializer
());
return
new
ObjectMapper
()
.
registerModule
(
new
ParameterNamesModule
())
.
disable
(
SerializationFeature
.
WRITE_DATES_AS_TIMESTAMPS
)
.
configure
(
DeserializationFeature
.
FAIL_ON_UNKNOWN_PROPERTIES
,
false
)
.
registerModule
(
javaTimeModule
);
}
static
class
InstantCustomSerializer
extends
JsonSerializer
<
Instant
>
{
private
final
DateTimeFormatter
format
;
private
InstantCustomSerializer
(
DateTimeFormatter
formatter
)
{
this
.
format
=
formatter
;
}
@Override
public
void
serialize
(
Instant
instant
,
JsonGenerator
jsonGenerator
,
SerializerProvider
serializerProvider
)
throws
IOException
{
if
(
instant
==
null
)
{
return
;
}
String
jsonValue
=
format
.
format
(
instant
.
atZone
(
ZoneId
.
systemDefault
()));
jsonGenerator
.
writeString
(
jsonValue
);
}
}
static
class
InstantCustomDeserializer
extends
JsonDeserializer
<
Instant
>{
@Override
public
Instant
deserialize
(
JsonParser
p
,
DeserializationContext
ctxt
)
throws
IOException
{
String
dateString
=
p
.
getText
().
trim
();
if
(
StringUtils
.
isNotBlank
(
dateString
)){
Date
pareDate
;
try
{
pareDate
=
DateFormatUtil
.
pareDate
(
dateString
);
if
(
null
!=
pareDate
){
return
pareDate
.
toInstant
();
}
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
}
return
null
;
}
}
static
class
DateCustomDeserializer
extends
JsonDeserializer
<
Date
>{
@Override
public
Date
deserialize
(
JsonParser
p
,
DeserializationContext
ctxt
)
throws
IOException
{
String
dateString
=
p
.
getText
().
trim
();
if
(
StringUtils
.
isNotBlank
(
dateString
)){
try
{
return
DateFormatUtil
.
pareDate
(
dateString
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
}
return
null
;
}
}
/**
* Support for Java date and time API.
* @return the corresponding Jackson module.
*/
@Bean
public
JavaTimeModule
javaTimeModule
()
{
return
new
JavaTimeModule
();
}
@Bean
public
Jdk8Module
jdk8TimeModule
()
{
return
new
Jdk8Module
();
}
}
\ No newline at end of file
src/main/java/com/tykj/base/util/DateFormatUtil.java
0 → 100644
浏览文件 @
77d82ffc
package
com
.
tykj
.
base
.
util
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.time.FastDateFormat
;
import
javax.validation.constraints.NotNull
;
import
java.text.ParseException
;
import
java.time.Instant
;
import
java.util.Date
;
/**
* 时间格式化工具工具
*
* @author HuangXiahao
* @version V1.0
* @class DateFormatUtil
* @packageName com.example.personnelmanager.common.utils
* @data 2020/5/20
**/
public
class
DateFormatUtil
{
public
static
final
String
SYMBOL_DOT
=
"\\."
;
/**
* 日期正则yyyy-MM
*/
public
static
final
String
DATE_REGEX_YYYYMM
=
"^\\d{4}-\\d{1,2}$"
;
/**
* 日期正则yyyy-MM-dd
*/
public
static
final
String
DATE_REGEX_YYYYMMDD
=
"^\\d{4}-\\d{1,2}-\\d{1,2}$"
;
/**
* 日期正则yyyy-MM-dd hh:mm
*/
public
static
final
String
DATE_REGEX_YYYYMMDDHHMM
=
"^\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}$"
;
/**
* 日期正则yyyy-MM-dd hh:mm:ss
*/
public
static
final
String
DATE_REGEX_YYYYMMDDHHMMSS
=
"^\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}$"
;
/**
* Instant日期秒+纳秒
*/
public
static
final
String
DATE_REGEX_SECOND_DOT_NANOSECOND
=
"^[0-9]+\\.[0-9]{1,9}$"
;
/**
* 日期正则yyyy-MM-dd'T'HH:mm:ssZ
*/
public
static
final
String
DATE_REGEX_YYYYMMDD_T_HHMMSS_Z
=
"^\\d{4}-\\d{1,2}-\\d{1,2}T\\d{1,2}:\\d{1,2}:\\d{1,2}Z$"
;
/**
* 日期正则yyyy-MM-dd'T'HH:mm:ssZ
*/
public
static
final
String
DATE_REGEX_YYYYMMDD_T_HHMMSS_SSS_Z
=
"^\\d{4}-\\d{1,2}-\\d{1,2}T\\d{1,2}:\\d{1,2}:\\d{1,2}\\.\\d{1,3}Z$"
;
/**
* 以T分隔日期和时间,并带时区信息,符合ISO8601规范
*/
public
static
final
String
PATTERN_ISO
=
"yyyy-MM-dd'T'HH:mm:ss.SSSZZ"
;
public
static
final
String
PATTERN_ISO_ON_SECOND
=
"yyyy-MM-dd'T'HH:mm:ssZZ"
;
public
static
final
String
PATTERN_ISO_ON_DATE
=
"yyyy-MM-dd"
;
public
static
final
String
PATTERN_ISO_ON_MONTH
=
"yyyy-MM"
;
/**
* 以空格分隔日期和时间,不带时区信息
*/
public
static
final
String
PATTERN_DEFAULT
=
"yyyy-MM-dd HH:mm:ss.SSS"
;
public
static
final
String
PATTERN_DEFAULT_ON_SECOND
=
"yyyy-MM-dd HH:mm:ss"
;
public
static
final
String
PATTERN_DEFAULT_ON_MINUTE
=
"yyyy-MM-dd HH:mm"
;
//
/**
* 以T分隔日期和时间,并带时区信息,符合ISO8601规范
*/
public
static
final
FastDateFormat
ISO_FORMAT
=
FastDateFormat
.
getInstance
(
PATTERN_ISO
);
public
static
final
FastDateFormat
ISO_ON_SECOND_FORMAT
=
FastDateFormat
.
getInstance
(
PATTERN_ISO_ON_SECOND
);
public
static
final
FastDateFormat
ISO_ON_DATE_FORMAT
=
FastDateFormat
.
getInstance
(
PATTERN_ISO_ON_DATE
);
public
static
final
FastDateFormat
ISO_ON_MONTH_FORMAT
=
FastDateFormat
.
getInstance
(
PATTERN_ISO_ON_MONTH
);
/**
* 以空格分隔日期和时间,不带时区信息
*/
public
static
final
FastDateFormat
DEFAULT_FORMAT
=
FastDateFormat
.
getInstance
(
PATTERN_DEFAULT
);
public
static
final
FastDateFormat
DEFAULT_ON_SECOND_FORMAT
=
FastDateFormat
.
getInstance
(
PATTERN_DEFAULT_ON_SECOND
);
public
static
final
FastDateFormat
DEFAULT_ON_MINUTE_FORMAT
=
FastDateFormat
.
getInstance
(
PATTERN_DEFAULT_ON_MINUTE
);
/**
* 将日期格式的字符串转换成指定格式的日期
* @param pattern 日期格式
* @param dateString 日期字符串
* @return
* @throws ParseException
*/
public
static
Date
pareDate
(
@NotNull
String
pattern
,
@NotNull
String
dateString
)
throws
ParseException
{
return
FastDateFormat
.
getInstance
(
pattern
).
parse
(
dateString
);
}
/**
* 将日期格式的字符串根据正则转换成相应格式的日期
* @param dateString 日期字符串
* @return
* @throws ParseException
*/
public
static
Date
pareDate
(
@NotNull
String
dateString
)
throws
ParseException
{
String
source
=
dateString
.
trim
();
if
(
StringUtils
.
isNotBlank
(
source
))
{
if
(
source
.
matches
(
DATE_REGEX_YYYYMM
)){
return
ISO_ON_MONTH_FORMAT
.
parse
(
source
);
}
else
if
(
source
.
matches
(
DATE_REGEX_YYYYMMDD
)){
return
ISO_ON_DATE_FORMAT
.
parse
(
source
);
}
else
if
(
source
.
matches
(
DATE_REGEX_YYYYMMDDHHMM
)){
return
DEFAULT_ON_MINUTE_FORMAT
.
parse
(
source
);
}
else
if
(
source
.
matches
(
DATE_REGEX_YYYYMMDDHHMMSS
)){
return
DEFAULT_ON_SECOND_FORMAT
.
parse
(
source
);
}
else
if
(
source
.
matches
(
DATE_REGEX_YYYYMMDD_T_HHMMSS_Z
)){
return
ISO_ON_SECOND_FORMAT
.
parse
(
source
);
}
else
if
(
source
.
matches
(
DATE_REGEX_YYYYMMDD_T_HHMMSS_SSS_Z
)){
return
ISO_FORMAT
.
parse
(
source
);
}
else
if
(
source
.
matches
(
DATE_REGEX_SECOND_DOT_NANOSECOND
)){
String
[]
split
=
source
.
split
(
SYMBOL_DOT
);
return
Date
.
from
(
Instant
.
ofEpochSecond
(
Long
.
parseLong
(
split
[
0
]),
Long
.
parseLong
(
split
[
1
])));
}
else
{
throw
new
IllegalArgumentException
(
"Invalid date value '"
+
source
+
"'"
);
}
}
return
null
;
}
}
src/main/resources/application.yml
浏览文件 @
77d82ffc
spring
:
jackson
:
date-format
:
yyyy-MM-dd HH:mm:ss
time-zone
:
GMT+8
datasource
:
username
:
root
password
:
Huang123+
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论