在java中使用SimpleDataFormat

在java中使用SimpleDataFormat,java,simpledateformat,Java,Simpledateformat,我正在尝试以下代码 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 Objec

我正在尝试以下代码

    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

有什么建议吗

谢谢


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

这很危险:

signupDate.set(Calendar.MONTH, 01);
不要使用这样的神奇数字,因为您或下一位维护此代码的编码人员可能不知道月份是基于0的,这会将月份设置为二月而不是一月

更好:

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


无论需要哪种格式。

您的格式字符串是什么?参数的值是什么?您为什么要强制转换
SimpleDataFormat.format()
?@SotiriosDelimanolis:是的,他只遗漏了最重要的信息之一。如果可以使用StringBuilder,请不要使用StringBuffer。
signupDate.set(Calendar.MONTH, Calendar.FEBRUARY);