我只收到特定字符串字段的错误,我在下面给出了我的代码
public static void main(String[] args) throws ParseException {
String sDate1="201710164425";
Date date1=new SimpleDateFormat("yyyyMMddhhmmss").parse(sDate1);
System.out.println(sDate1+"\t"+date1);
}
如果我将String更改为在sDate1="2017101604425";
之前添加0,它可以正常工作,我得到Mon Oct 16 04:42:05 IST 2017
,但我的输入是这样的sDate1="201710164425";
帮助我为此提供更好的解决方案,提前致谢
答案 0 :(得分:4)
yyyyMMddhhmmss <- format
201710164425 <- data
所以第4小时你需要做04
(hh)而不是4.相同的分钟。
答案 1 :(得分:2)
你想要的是一个没有前导零的“小时值”,我也看到分钟和/或秒应该是相同的,所以你可以使用像Hms
这样的时间格式。
与HHmmss
相比,使用Hms
这样的格式只会为每个字段占用最少的数字(更复杂,但这是主意)。
这可能是错过解释。假设我想向您发送01:21:05
之类的时间,它看起来像1215
以匹配您需要的模式。
new SimpleDateFormat("Hms")
1215 - &gt; 1点02分15秒
看到问题? 01:21:05
将来01:02:15
。
我总是建议为每个字段使用前导零(两位数)来防止任何错误。
为每个字段使用两位数以防止出现任何问题
new SimpleDateFormat("HHmmss")
012105 - &gt; 1点21分05秒
您可以定义模式以在每个字段之间使用分隔符:
new SimpleDateFormat("H:m:s")
1:21:5 - &gt; 01:21:05
答案 2 :(得分:1)
您可以使用SimpleDateFormat
中的其他模式实现您想要的效果:
yyyyMMddKmmssa
哪里
K - Hour in am/pm (0-11)
a - Am/pm marker
请注意,您需要最后一个'a'。如果你只需要一个4来指示04:00和16:00,你需要一些东西来区分它们。