dje*_*lin 15 java calendar date simpledateformat
如果你能想象的话,这会在我的软件中引起Y2K风格的错误.奇怪的是,一年的计算只发生在一年中的两天,我不太确定如何排除故障.
输出:
03-Jan-2013
02-Jan-2013
01-Jan-2013
31-Dec-2013 ** strange
30-Dec-2013 ** strange
29-Dec-2012
28-Dec-2012
27-Dec-2012
26-Dec-2012
25-Dec-2012
Run Code Online (Sandbox Code Playgroud)
我不确定Java日期实用程序的哪一部分可能导致此类错误.
代码(因为测试很小,我包括一个完整的工作程序):
import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateT {
private static String getFormattedBackscanStartTime(int days) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-YYYY");
Calendar workingDate = Calendar.getInstance();
workingDate.add(Calendar.DATE, -1 * days);
String formattedStartTime = dateFormat.format(workingDate.getTime());
return formattedStartTime;
}
public static void main(String args[]) {
for(int i = 35; i < 45; i++) {
System.out.println(getFormattedBackscanStartTime(i));
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 34
这就是问题:
"dd-MMM-YYYY"
Run Code Online (Sandbox Code Playgroud)
YYYY是周年,而不是日历年.你想要的yyyy.
2012日历年的最后两天是在2013年的第一周.您通常只应将周年与"一年中的一周"说明符(w)结合使用.
我假设你正在使用java 1.7.
上面的代码片段无法使用,java 1.6因为它SimpleDateFormat("dd-MMM-YYYY")会引发java.lang.IllegalArgumentException(YYYY不可用java 1.6)
你需要使用yyyy而不是YYYY.
Y -> week-year
y -> year
Run Code Online (Sandbox Code Playgroud)
编辑
效果很好yyyy:
$ java DateT
03-Jan-2013
02-Jan-2013
01-Jan-2013
31-Dec-2012
30-Dec-2012
29-Dec-2012
28-Dec-2012
27-Dec-2012
26-Dec-2012
25-Dec-2012
Run Code Online (Sandbox Code Playgroud)