2012-07-10 153 views
2

日志(2个不同日期):解析Java的字符串到日期

START TIME BEFORE PARSE: 06/27/2012 09:00 
START TIME AFTER PARSE : Thu Mar 06 09:00:00 EET 2014 


START TIME BEFORE PARSE: 07/06/2012 09:00 
START TIME AFTER PARSE : Thu Jun 07 09:00:00 EEST 2012 

代码:

DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); 
      Date date = sdf.parse(time); 
      System.out.println("TIME BEFORE PARSE: " + time); 
      System.out.println("TIME AFTER PARSE : " + date); 

为什么它搞乱了一年?如何让它工作?

+0

什么是'时间'? – Nishant 2012-07-10 06:59:01

+0

@Nishant:即时消息登录日志 – Jaanus 2012-07-10 06:59:22

+0

它确实搞乱了哪一年?你有这样的输出吗? – 2012-07-10 07:00:01

回答

6

因为你倒月份与日期:

   dd/MM/yyyy HH:mm 
       06/27/2012 09:00 

没有第27个月的一年。

+0

好吧,但我想要的是'dd/MM/yyyy HH:mm'格式,我可以以某种方式将其逆转,就像我试过的一样吗? – Jaanus 2012-07-10 07:11:56

2

第一个示例中的月份为27,这在我知道的任何日历中都是无效的。 (您可能刚刚得到了错误的日/月订购,无论是在您的输入或您选择的格式。)

+0

好的,但我想要的是'dd/MM/yyyy HH:mm'格式,我可以以某种方式将其逆转,就像我试过的一样吗? – Jaanus 2012-07-10 07:12:15

2

您使用格式dd/MM/yyyy解析日期2012年6月27日。我怀疑27是一个月。适当的格式是MM/dd/yyyy。

默认情况下,DateFormat宽松,因此将27视为有效月份:2年+ 3个月,所以最终在2年后的3月结束。

+0

好的,但我想要的是'dd/MM/yyyy HH:mm'格式,我可以以某种方式将其逆转,就像我试过的一样吗? – Jaanus 2012-07-10 07:12:30

+0

你的问题没有意义:你有一个字符串表示格式为MM/dd/yyyy的日期。就是这样,你别无选择。如果字符串没有适当的格式,请修正产生此字符串的代码,而不是解析其代码的位置。 – 2012-07-10 07:50:42

1
String time = "06/27/2012 09:00"; 
    DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm"); 
    Date date = sdf.parse(time); 
    System.out.println("TIME BEFORE PARSE: " + time); 
    System.out.println("TIME AFTER PARSE : " + date); 

在你的例子中日期格式是错误的。你必须给 “DD/MM/YYYY HH:MM”,这应该是 “MM/DD/YYYY HH:MM”

0

您已经使用了模式DD/MM/YYYY,但您输入的日期作为MM/dd/YYYY,造成你这种奇怪的行为..