我正在尝试以下代码,
Calendar signupDate = Calendar.getInstance();
signupDate.set(Calendar.YEAR, 2014);
signupDate.set(Calendar.MONTH, 01);
signupDate.set(Calendar.DAY_OF_MONTH, 01);
Date signupDateTime = signupDate.getTime();
new Object[]{signupDateTime};
Date date = (Date) params[0];
String format = (String) params[1];
try {
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.ENGLISH);
String expDateStr = (String) sdf.format(date);
System.out.println("Expiration Date: "+expDateStr);
} catch (Throwable t) {
throw new RuntimeException("Could not execute DateToString function for Date:" + params[0] + " with Pattern:" + params[1], t);
}
此程序打印:到期日期:2014-02-32
在调试时,我将Java API中的java.text.DateFormat类扩展到以下函数中,
public final String format(Date date)
{
return format(date, new StringBuffer(),
DontCareFieldPosition.INSTANCE).toString();
}
格式函数的日期参数的运行时值为:Fri Feb 01 17:58:30 PST 2013
但是这个函数返回:2014-02-32
我不确定格式化如何将01转换为32。
有什么建议吗?
谢谢,
Vijay Bhore
答案 0 :(得分:6)
2月1日是一年中的第32天。您的SimpleDateFormat
可能正在使用DD
而不是dd
。
答案 1 :(得分:1)
这很危险:
signupDate.set(Calendar.MONTH, 01);
不要使用这样的幻数,因为您或下一个维护此代码的编码器可能不知道月份是0,这会将月份设置为2月而不是1月。
更好:
signupDate.set(Calendar.MONTH, Calendar.JANUARY);
或
signupDate.set(Calendar.MONTH, Calendar.FEBRUARY);
无论哪个都是。