Archive for July, 2010

关于SimpleDateFormat的陷阱

Thursday, July 15th, 2010

代码中总是有那么多神奇的事情发生, 神奇的背后总是朴实无华的事实 1. SimpleDateFormat 是有 TimeZone的 1)每一个SimpleDateFormat的实例都会和一个TimeZone的实例相关联 2)在不指定TimeZone的情况下,SimpleDateFormat默认会使用OS的TimeZone 看下面的代码片段: SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); Date date = sdf.parse("18-07-1976"); System.out.println(date.getTime()); 这段代码展示的时间一般情况下是没问题的, 但是在两台不同TimeZone的OS上跑的时候获得的 时间是不一样的,在分布式环境中这个还是需要注意下的 修复后的代码 方法一:在期盼的日期格式中带上TimeZone SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy z"); Date date = sdf.parse("18-07-1976 ICT"); System.out.println(date.getTime()); 方法二: 用指定的TimeZone来解释所有的时间 SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); sdf.setTimeZone(TimeZone.getTimeZone("GMT")); Date date = sdf.parse("18-07-1976"); 2. 验证时间字符串的合法性 一般传入一个时间字符串, 我们会用异常的形式判断其合法性 如: SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); Date d = null; try { d = ...