记自己一次无知的写法,导致项目产生一个异常。下面拿出实例:
我负责接收接口传递过来的参数,做相应的转换,出入数据库中,一个时间的通过字符串的形式传递过来,这个时间是24小时制,我的转化如下:
JSONObject params = new JSONObject(); String scanTime = params.getString("scanTime"); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
测试都是上午测试的,结果就出现了一个问题,中午12点扫描的东西,显示是0点,我就郁闷了,就查看了一下1.8-API

H和h的时间制度是不一样,一个是12小时制,一个是24小时制度,心里不禁感叹java设计的真全面,只怪自己太low,缺乏相关的知识。
还有特别需要注意的是,DD和dd表示的也是不一样的,下面详细解释一下:
| 字母 | 日期或时间元素 | 表示 | 实例 |
| G | 年代标志符 | Text | AD |
| y | 年 | Year | 1996:96 |
| Y | 年 | Year | 2009;09 |
| M | 月 | Month | July;Jul;07 |
| L | 年月(独立形式) | Month | July;Jul;07 |
| w | 一年中第几个星期 | Number | 27 |
| W | 一月中第几个星期 | Number | 2 |
| D | 一年中的第几天 | Number | 189 |
| d | 一月中的第几天 | Number | 10 |
| F | 一月中第几个星期 | Number | 03 |
| E | 星期数(星期一.......星期日) | Text | 星期日 |
| u | 星期数(1 =星期一,7,星期日) | Number | 7 |
| a | 上午 / 下午 标记符 | Text | PM |
| H | 时 一天中的小时数(0-23) | Number | 0 |
| k | 时 一天中的小时数(1~24) | Number | 24 |
| K | am/pm 中的小时数(0-11) | Number | 0 |
| h | am/pm 中的小时数(1-12) | Number | 12 |
| m | 小时中的分钟数 | Number | 30 |
| s | 分钟的秒数(当前分钟的秒数) | Number | 55 |
| S | 毫秒数(当前秒的毫秒数) | Number | 978 |
| z | 时区 | CST | |
| Z | 时区 | =0800 | |
| X | 时区 | +08 |
大家在使用SimpleDateFormat时,千万要注意大小写,特别是M\m、D\d、S\s、H\h的时间转换。
自己出错,引以为戒。如有不当,恳请指教!
本文分享了一次因混淆24小时制与12小时制而导致项目异常的经历,详细解释了SimpleDateFormat中H/h、M/m、D/d等字符的正确用法,提醒开发者注意大小写敏感性。
680

被折叠的 条评论
为什么被折叠?



