【java中时间转换】,当MM变成了mm,当DD变成了dd,会发生什么事?

本文分享了一次因混淆24小时制与12小时制而导致项目异常的经历,详细解释了SimpleDateFormat中H/h、M/m、D/d等字符的正确用法,提醒开发者注意大小写敏感性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记自己一次无知的写法,导致项目产生一个异常。下面拿出实例:

我负责接收接口传递过来的参数,做相应的转换,出入数据库中,一个时间的通过字符串的形式传递过来,这个时间是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年代标志符TextAD
yYear1996:96
YYear2009;09
MMonthJuly;Jul;07
L年月(独立形式)MonthJuly;Jul;07
w一年中第几个星期Number27
W一月中第几个星期Number2
D一年中的第几天Number189
d一月中的第几天Number10
F一月中第几个星期Number03
E星期数(星期一.......星期日)Text星期日
u星期数(1 =星期一,7,星期日)Number7
a上午 / 下午 标记符TextPM
H时 一天中的小时数(0-23)Number0
k时 一天中的小时数(1~24)Number24
Kam/pm 中的小时数(0-11)Number0
ham/pm 中的小时数(1-12)Number12
m小时中的分钟数Number30
s分钟的秒数(当前分钟的秒数)Number55
S毫秒数(当前秒的毫秒数)Number978
z时区 CST
Z时区 =0800
X时区 +08

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

大家在使用SimpleDateFormat时,千万要注意大小写,特别是M\m、D\d、S\s、H\h的时间转换。
自己出错,引以为戒。如有不当,恳请指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值