使用yyyy-MM-dd hh:mm:ss格式解析日期的意外差异

我运行下面的java代码来获得时差。

import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; public class Test { public static SimpleDateFormat simpleDateFormat= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); public static Date date1,date2; public static long diff; public static String TAG ="DateConversion"; public static Calendar cal1,cal2; public static void main(String a[]) { checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 11:15:00"); checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 12:15:00"); checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 13:15:00"); } public static void checkTimeDifference(String strDate,String checkDate) { try { simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); date1 = simpleDateFormat.parse(strDate); date2 = simpleDateFormat.parse(checkDate); //in milliseconds diff = date2.getTime() - date1.getTime(); System.out.println("Difference : "+diff); long diffSeconds = diff / 1000 % 60; long diffMinutes = diff / (60 * 1000) % 60; long diffHours = diff / (60 * 60 * 1000) % 24; long diffDays = diff / (24 * 60 * 60 * 1000); System.out.println(diffDays + " days, "); System.out.println(diffHours + " hours, "); System.out.println(diffMinutes+ " minutes, "); System.out.println(diffSeconds+ " seconds."); } catch (Exception e) { System.out.println(""+e); } } } 

上述程序的输出是。,

 Difference : 3600000 0 days, 1 hours, 0 minutes, 0 seconds. Difference : -36000000 0 days, -10 hours, 0 minutes, 0 seconds. Difference : 10800000 0 days, 3 hours, 0 minutes, 0 seconds. 

执行"checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 12:15:00");"时返回减去值"checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 12:15:00");"

为什么它的回报减去价值以及如何解决呢?

这就是问题:

 new SimpleDateFormat("yyyy-MM-dd hh:mm:ss") 

这里的hh意味着“每小时12小时”,所以12表示午夜,除非有东西表明它意味着下午12点。 您的值13仅起作用,因为解析器处于宽松模式。 你要:

 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 

我还强烈建议你使用Joda Time来完成这项任务,因为它使它变得更加简单。

SimpleDateFormat模式更改为yyyy-MM-dd HH:mm:ss可修复问题。

发生这种情况是因为在yyyy-MM-dd hh:mm:ss情况下, 12被评估为0