Java - LocalDateTime解析日期字符串值时丢弃秒值“00“,如“2021-07-01 15:33:00“ 转换为“2021-07-01T15:33“

    在测试数据的时候,收集到各个时间点上的数据,发现怎么数据有点奇怪,都是中间的时间,没有整秒的数据呢?

    查看后台日志,发现是因为在使用LocalDateTime接收秒值为"00"的数据时,秒值被丢弃掉了 

 wrong date and time parameter format, parameter: 2021-07-01T15:33, format requirement: [yyyy-MM-ddTHH:mm:ss | yyyy-MM-ddTHH:mm:ss.SSS][+HH:mm | -HH:mm | Z], position: character 157, line 1"}

错误的日期和时间参数格式,参数:21-07-01 t15:33,格式要求:[yyyy-MM-ddTHH:mm:ss | yyyy-MM-ddTHH:mm:ss。[+HH:mm | -HH:mm | Z],位置:字符157,第1行"} 

    但是原来的数据是:"2021-07-01 15:33:00" 而不是:"2021-07-01T15:33"

SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@52adeeec] was not registered for synchronization because synchronization is not active
JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@2fcac179] will not be managed by Spring
==>  Preparing: insert into test_table(`token`,`session_id`, `link`,`cid`, `link_type`,`detail_id`, `xxx_id`, `source`, `xxx_link`, `page_open`, `page_click`, `length_of_stay`, `xxx_time`, `ip`, `os`, `xxx`, `created`, `address`, `xxx_id`, `xxx_name`, `xxxr_id`, `xxxe_id`) values (?,?,?,?,?,?,?,?,? ,?,?,?,?,?,?,?,?,?,? ,?,?,?)
==> Parameters: null(String), sessionId(String), A06zeA05(String), 1(Integer), (String), -1(Long), null, http://zhangdaopin.localhost.com/AAAABBBB(String), null, true(Boolean), null, null, 2021-07-01 15:33:00.0(Timestamp), 172.18.24.64(String), Windows(String), Chrome 8(String), 2021-07-01 15:33:46.306(Timestamp), 未分配或者内网IP(String), aaaaaaaaaaaaaaaaaaaaaaa(String), null(String), null(String), null(String)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@52adeeec]
[WARN ] 2021-07-01 15:33:46,487 method:com.xxxxx.xx.xxxxapi.sdk.client.DefaultxxxxapiHttpSdk.getBody(DefaultxxxxapiHttpSdk.kt:32)
Request failed: {"timestamp":"2021-07-01T07:33:44.512Z","code":400,"status":"FAILED_PRECONDITION","message":"Parameter error, wrong date and time parameter format, parameter: 2021-07-01T15:33, format requirement: [yyyy-MM-ddTHH:mm:ss | yyyy-MM-ddTHH:mm:ss.SSS][+HH:mm | -HH:mm | Z], position: character 157, line 1","details":[{"message":"Parameter error, wrong date and time parameter format, parameter: 2021-07-01T15:33, format requirement: [yyyy-MM-ddTHH:mm:ss | yyyy-MM-ddTHH:mm:ss.SSS][+HH:mm | -HH:mm | Z], position: character 157, line 1"}],"module":"xxxx-service","service":"xxxxapi","error_code":"152204","msg":"Parameter error, wrong date and time parameter format, parameter: 2021-07-01T15:33, format requirement: [yyyy-MM-ddTHH:mm:ss | yyyy-MM-ddTHH:mm:ss.SSS][+HH:mm | -HH:mm | Z], position: character 157, line 1"}
[INFO ] 2021-07-01 15:33:46,528 method:com.xxxx.channel.task.AutoCountTask.processHits(AutoCountTask.java:169)
统计数据命令执行出现异常SdkException
com.xxxxx.xx.sdk.exception.SdkException: Parameter error, wrong date and time parameter format, parameter: 2021-07-01T15:33, format requirement: [yyyy-MM-ddTHH:mm:ss | yyyy-MM-ddTHH:mm:ss.SSS][+HH:mm | -HH:mm | Z], position: character 157, line 1
        at com.xxxxx.xx.xxxxapi.sdk.client.DefaultxxxxapiHttpSdk.getBody(DefaultxxxxapiHttpSdk.kt:41)
        at com.xxxxx.xx.xxxxapi.sdk.client.DefaultxxxxapiHttpSdk.execute(DefaultxxxxapiHttpSdk.kt:55)
        at com.xxxxx.channel.service.xxxxapiService.xxxxApiHttpService.senxxsgToxxxxapi(xxxxApiHttpService.java:63)
        at com.xxxxx.channel.service.ContentVisitTrackService.lambda$saveVisitTrack$1(ContentVisitTrackService.java:186)
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
        at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:647)
        at com.xxxxx.channel.service.ContentVisitTrackService.saveVisitTrack(ContentVisitTrackService.java:184)
        at com.xxxxx.channel.task.AutoCountTask.processHits(AutoCountTask.java:134)
        at com.xxxxx.channel.task.AutoCountTask.run(AutoCountTask.java:57)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:853)

    第一种办法可以在字段上增加格式化的指定

@JSONField(format = "yyyy-MM-dd'T'HH:mm:ss")

    第二种办法可以在写库的时候,格式化这个日期

LocalDateTime visitTime = LocalDateTime.new();
String visitTimeFormat = visitTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"));

posted @   zhangdaopin  阅读(1353)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示