This question already has answers here:
Java Date() giving the wrong date [duplicate]
                                
                                    (9个答案)
                                
                        
                                2年前关闭。
            
                    
我试图解析一个日期格式字符串,然后打印出相同模式的格式字符串。我希望他们是一样的。但是输出与输入不一致。任何帮助深表感谢

这是我的代码

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相同
我做错了什么?

最佳答案

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

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


Y用于Week Year


  一周的一周与WEEK_OF_YEAR周期同步。之间的所有星期
  前一周和后一周(含)具有相同的周年值。
  因此,一周的第一天和最后一天可能会有所不同
  日历年的值。
  
  例如,1998年1月1日是Thursday。如果getFirstDayOfWeek()
  MONDAYgetMinimalDaysInFirstWeek()为4(ISO 8601标准
  兼容设置),那么1998年的第1周从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)

09-15 17:31