2013-09-25 54 views
1

我想解析一个日期格式字符串,然后打印出格式化的字符串为相同的模式。我期待他们是一样的。但是输出与输入不一致。任何帮助深表感谢Java SimpleDateFormat解析不可逆?

这里是我的代码

import java.text.SimpleDateFormat; 
import java.util.Date; 

public class Test{ 
    public static void main(String[] args) { 
    String pattern=args[0]; 
    String dtstr = args[1]; 
    SimpleDateFormat sdf = new SimpleDateFormat(pattern); 
    Date date = new Date(); 
    try { 
     // 
     String fmtd = sdf.format(date); 
     System.out.println("The formatted string: " +fmtd); 
     System.out.println("The parsed date is: " + sdf.format(sdf.parse(fmtd))); 
     System.out.println("The parsed date from input is: " + sdf.format(sdf.parse(dtstr))); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 

这是我如何调用该

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ sudo java Test "EEE MMM dd YYYY HH:mm:ss Z (zzzz)" "Sun Sep 22 2013 20:03:46 +0530 (India Standard Time)"

这里是输出

The formatted string: Wed Sep 25 2013 19:55:57 +0000 (Coordinated Universal Time) 
The parsed date is: Wed Jan 02 2013 19:55:57 +0000 (Coordinated Universal Time) 
The parsed date from input is: Sun Dec 30 2013 20:03:46 +0530 (India Standard Time) 

我期待的formatted stringparsed strings到b e相同 我做错了什么?

回答

4

你在你的格式字符串中使用YYYY。它应该是yyyy

"EEE MMM dd yyyy HH:mm:ss Z (zzzz)"; 

YWeek Year

一周年是同步与WEEK_OF_YEAR周期。第一周和最后一周(含)之间的所有星期都具有相同的周年价值。 因此,一周年的第一天和最后一天可能有不同的 历年值。

例如,1998年1月1日为Thursday。如果getFirstDayOfWeek()MONDAYgetMinimalDaysInFirstWeek()是4(ISO 8601标准 兼容设置),然后1周开始1998年对 1997年12月29日,并在1998年1月4日结束的一周年是1998年的最后三 天历年1997年。如果,但是,getFirstDayOfWeek()SUNDAY,那么1998年开始1周的1998年1月4日和1998年 1月10日,结束; 1998年的前三天,然后是一周的一部分 1997年第53及其周今年是1997年。

有了改变的模式,你会得到输出以下内容:

The formatted string: Thu Sep 26 2013 01:32:09 +0530 (India Standard Time) 
The parsed date is: Thu Sep 26 2013 01:32:09 +0530 (India Standard Time) 
The parsed date from input is: Sun Sep 22 2013 20:03:46 +0530 (India Standard Time)