-2

我正在尝试以下代码,

    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。

有什么建议吗?

谢谢,

维杰·博尔

4

2 回答 2

7

2 月 1 日是一年中的第 32 天。您SimpleDateFormat可能正在使用DD而不是dd.

于 2013-10-01T01:03:01.917 回答
1

这是危险的:

signupDate.set(Calendar.MONTH, 01);

不要使用这样的幻数,因为您或下一个维护此代码的编码人员可能不知道月份是基于 0 的,这会将月份设置为二月而不是一月。

更好的:

signupDate.set(Calendar.MONTH, Calendar.JANUARY);

或者

signupDate.set(Calendar.MONTH, Calendar.FEBRUARY);

随心所欲。

于 2013-10-01T01:04:48.007 回答