SimpleDateFormat 作为一个日期类型到字符串类型的格式化转换工具,非常好用,一个简单的例子如下:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
String sDate = sdf.format(now);
String date1 = "2011-12-19 12:12:12":
Date date = sdf.parse(date1);
这里需要了解格式掩码的含义,若含义没有弄清楚,大小写不区分,则可能导致潜在的隐患。如若格式小时设置为hh,是12小时制,而使用HH则是24小时制。若字符串日期是12小时,则小时位在parse后被置为0,而很多情况下,我们需要的是24小时制,不希望被转换为0。这时若用hh就出问题了。
下面这个例子中小时位是12小时制
SimpleDateFormat sDF = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
最近发生在生产上的一个问题是,每天12点时,系统的锁机制失效,导致客户多次提交同一笔交易,造成多次重复记账的严重错误,而这个错误很少出现,曾经在另外一个客户中出过类似的问题,没有找到原因。后来发现该问题只是在12点到13点间发生,而客户在这个时间段很少做交易,故问题很隐蔽,一直没有被发现。
错误的最终原因是12点时,小时位被置为0,日期转换错误,导致应用系统锁机制失效。
另外大写的MM是代表月,小写的mm代表分钟,一旦写错,则日期转换就完全错误了。