final String sourceDate = "05.12.2014 12:17";
final String testDate = "05.12.2014 13:17";
final SimpleDateFormat originalSDF = new SimpleDateFormat("dd.MM.yyyy hh:mm");
final SimpleDateFormat testSDF = new SimpleDateFormat("dd.MM.yyyy HH:mm");
System.out.println(originalSDF.parse(sourceDate).toString());
System.out.println(testSDF.parse(sourceDate).toString());
System.out.println("=====================");
System.out.println(originalSDF.parse(testDate).toString());
System.out.println(testSDF.parse(testDate).toString());
输出结果为:
Fri Dec 05 00:17:00 GMT 2014
Fri Dec 05 12:17:00 GMT 2014
=====================
Fri Dec 05 13:17:00 GMT 2014
Fri Dec 05 13:17:00 GMT 2014
为什么这些格式的工作原理相同,但12:*的工作方式不同,hh:mm
解析为12h
格式,HH:mm
解析为24h
格式?< / p>
答案 0 :(得分:1)
如果您使用originalSDF.setLenient(false)
,那么解析"05.12.2014 13:17"
将引发异常......基本上处于宽松模式,hh
被视为HH
(即24小时)值)当值大于12 时(可能是当它为0时)。
就我个人而言,我认为默认为宽松模式是一个坏主意,但这是另一回事......基本上你的格式应该总是适合你的数据。如果您要获得13:17的值,那么您应该使用HH:mm。