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
格式?
最佳答案
如果您使用originalSDF.setLenient(false)
,那么解析"05.12.2014 13:17"
将抛出异常......基本上在宽松模式下,hh
当值大于 12 时(也可能为 0),被视为 HH
(即 24 小时值)。 p>
我个人认为默认为宽松模式是一个坏主意,但这是另一回事......基本上您的格式应该始终适合您的数据。如果您要获得 13:17 的值,则应使用 HH:mm。
关于java - 为什么 SimpleDateFormat HH 与 hh 的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27313028/