HttpClient DateUtils 的时区问题

Stella981
• 阅读 477

问题:

  今天在做测试发现传入的时间为 "2018-11-26" 在格式化后变成了"20181125"

DateUtils.formatDate(c.getTime(), "yyyyMMdd")

  解析工具使用的是httpClient 4.5

想法:

  1、不应该啊,这应该是比较常见的API

  2、这种常见的时间解析问题出错,那么应该是时区设置错误

  3、debug到 工具类内部,发现

1             SimpleDateFormat format = formats.get(pattern);
2             if (format == null) {
3                 format = new SimpleDateFormat(pattern, Locale.US);
4                 format.setTimeZone(TimeZone.getTimeZone("GMT"));
5                 formats.put(pattern, format);
6             }

  这使用了GMT 时区,和我们本地的时区差了8个小时;

  这个感觉设置得不是很友好,查看了下SimpleDateFormat 的初始化,感觉要人性化一点;

 1     private void initializeCalendar(Locale loc) {
 2         if (calendar == null) {
 3             assert loc != null;
 4             // The format object must be constructed using the symbols for this zone.
 5             // However, the calendar should use the current default TimeZone.
 6             // If this is not contained in the locale zone strings, then the zone
 7             // will be formatted using generic GMT+/-H:MM nomenclature.
 8             calendar = Calendar.getInstance(TimeZone.getDefault(), loc);
 9         }
10     }
点赞
收藏
评论区
推荐文章
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Easter79 Easter79
3年前
Swagger如何测试Date类型参数
问题Swagger测试时,参数直接输入日期格式化后的类型,会报参数日期转换错误:ConversionFailedException解决网上说在参数上添加注解@DateTimeFormat(pattern“yyyyMMdd”)或者是添加@JsonFormat(pattern”yyyyMMddHH:mm:
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
3年前
Java日期时间API系列30
  实际使用中,经常需要使用不同精确度的Date,比如保留到天2020042300:00:00,保留到小时,保留到分钟,保留到秒等,常见的方法是通过格式化到指定精确度(比如:yyyyMMdd),然后再解析为Date。Java8中可以用更多的方法来实现这个需求,下面使用三种方法:使用Format方法、 使用Of方法和使用With方法,性能对比,使用
Stella981 Stella981
3年前
Spring boot返回JSON类型响应及Content
一、背景服务器软件用Springboot开发,API调用的响应消息格式为JSON。对端调用接口后无法解析响应。抓包看Response的Body部分确实是正确的JSON格式字符串。二、问题分析继续分析日志发现对端收到的响应消息类型是text/plain?!对端解析先判断消息类型,这是无法按照JSON格式解析的。三、问题解决1\
Wesley13 Wesley13
3年前
Android 解析包出错问题
Android解析包出错问题app上线后经常会遇到安装包解析出错问题,今天刚好做个不完整的总结,解决问题1.检测系统是否开启“USB设备读写保护”,关闭后就可能可以正常安装APK了。2.安装包在下载过程中被破坏了,不完整,重新下载一次试试。或者换个应用市场下载3.如果是使用RE文件管理器
Wesley13 Wesley13
3年前
oracle小数点前零丢失的问题
1.问题起源 oracle数据库字段值为小于1的小数时,使用char类型处理,会丢失小数点前面的0 例如0.35就变成了.35 2.解决办法:(1)用to\_char函数格式化数字显示 select    to\_char(0.338,'fm9999999990.00')fromdual; 结果:0.34 
新支点小玉 新支点小玉
1年前
软件测试报告具体包含哪些内容?
一、什么是测试报告?测试报告是指把测试的过程和结果写成文档,对发现的问题和缺陷进行分析,为纠正软件的存在的质量问题提供依据,同时为软件验收和交付打下基础。二、测试执行和结束的准则1.测试执行的结束原因1)测试达到预期目的后,按计划结束2)受时间进度、资源的