simpledateformat to long 24小时制问题

进行基于时间的条件查询时,发现一个bug,修复了好久,才发现dateformat转long型存在一个很严重的进制问题。
如果是12进制parse之后,12-24点之间的时间字符串会被自动转成0-12点之间所对应的long型,直入正题,看代码陷阱(小写hh是12进制,大写HH是24进制):

  1. java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”,java.util.Locale.US);   
  2. java.util.Date startTime = sdf.parse(“2011-08-07 12:31:56″);   
  3. long ltime = startTime.getTime();   
  4. System.out.println(“Test1:”+ltime/1000);   
  5. sdf = new java.text.SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”,java.util.Locale.US);   
  6. startTime = sdf.parse(“2011-08-07 12:31:56″);   
  7. ltime = startTime.getTime();   
  8. System.out.println(“Test2:”+ltime/1000);  

输出结果则很清晰,截然不同:

  1. Test1:1312648316  
  2. Test2:1312691516  

 

关于Java 各种格式的时间解析问题,参看:http://jacoxu.com/?p=451

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>