在java中使用SimpleDateFormat

时间:2013-10-01 01:01:44

标签: 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 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

2 个答案:

答案 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);

无论哪个都是。