2009-04-14 144 views
3

我似乎无法看到下面的示例代码的问题。出于某种原因,似乎忽略了一年,并说日期相同,如下面的输出所示。我必须错过简单的东西。java字符串datetime转换问题

2006年1月28日
2007年1月16日
星期二4月1日00:00:00 PDT 2008
星期二4月1日00:00:00 PDT 2008

import java.util.*; 
import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 

    class ExampleProgram { 
     public static void main(String[] args){ 
     DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
     String d1String = "01/28/2006"; 
     String d2String = "01/16/2007"; 
     System.out.println(d1String); 
     System.out.println(d2String); 
     Date d1=null; 
     try { 
      d1 = df.parse(d1String); 
     } catch (ParseException e) {     
      System.out.println(e.getMessage()); 
     }   
     Date d2=null; 
     try { 
      d2 = df.parse(d2String); 
     } catch (ParseException e) {     
      System.out.println(e.getMessage()); 
     } 
     System.out.println(d1); 
     System.out.println(d2); 
     System.out.println("done"); 
     } 
    } 
+0

一个愚人节玩笑?这似乎是非常设计的,日期对应于4月1日。+ 1年,-12个月==同日期。 如果你的dateformat对象是严格的(df.setLenient(false)),那么它会引发你的错误。 – evnafets 2009-04-14 04:31:38

回答

6
"dd/MM/yyyy" 

应改为:

"MM/dd/yyyy" 
+0

我怎么错过了....谢谢!! – 2009-04-14 03:53:50

0

你可以尝试声明你的日期为Date对象。

+1

他做到了。构造函数Date(String)已弃用。他使用正确的方式将字符串转换为日期。 – 2009-04-17 19:21:04

1

的原因,这是不给你,你所期待的是像彼得说,SimpleDateFormat应该读"MM/dd/yyyy"

,其结果是说,它们看起来是平等的原因是是由于您的格式因为它"dd/MM/yyyy",d1String的月是28.它需要28 - 12,增加一年,16 - 12,再增加一年,结果是4(4月),现在是2008年。同样的事情为d2String