SimpleDateFormat以错误的格式返回日期

时间:2014-11-25 07:53:56

标签: android date calendar simpledateformat

我有一个 DateTimehelper.class ,其中我已经执行了一些与日期相关的操作,代码工作正常,直到我从客户那里得到他们的错误格式的日期问题。以下是我的班级:

public class DateTimeHelper {

    private static Calendar cal;
    public static DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static DateFormat shortDateFormatter = new SimpleDateFormat("yyyy-MM-dd");
    public static DateFormat shortDateFormatterWithSlash = new SimpleDateFormat("dd/MM/yyyy");
    public static DateFormat dateFormat_dd_MM_yyyy = new SimpleDateFormat("dd-MM-yyyy");
    DateTimeHelper helper;

    /**
     * set UTC Date to the calendar instance
     * 
     * @param strDate
     *            date to set
     */
    public static void setDate(String strDate) {

        try {

            Date date = (Date) formatter.parse(strDate);
            cal = Calendar.getInstance();
            cal.setTime(date);
            updateDateTime();
        }
        catch (ParseException e) {

            e.printStackTrace();
        }
    }

    /**
     * update date every 1 second
     */
    private static void updateDateTime() {

        final Handler handler = new Handler();
        handler.post(new Runnable() {

            @Override
            public void run() {

                try {

                    cal.add(Calendar.SECOND, 1);
                                            handler.postDelayed(this, 1000);
                                    }
                                catch (Exception e) {

                    // TODO Auto-generated catch block
                    e.printStackTrace();
                                    }
            }
        });
    }

    /***
     * get updated date from calendar in custom date format
     * 
     * @return date
     */
    public static String getDate() {

        String strDate = null;
        try     {

            strDate = formatter.format(cal.getTime());
        }
        catch (Exception e) {

            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return strDate;
    }
}

当看到日志时,我发现日期的格式为:2014-0011-25 04:45:38这是完全错误的,我猜因为月份应该是11而不是0011。

但是当我尝试使用以下函数验证此日期时,它表示日期有效。

public static boolean isValidDate(String inDate) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    dateFormat.setLenient(false);
    try {

        dateFormat.parse(inDate.trim());
    } catch (ParseException pe) {

        return false;
    }
    return true;
}

如何成为有效日期? 为什么我的格式错误?

此问题非常随机,因为它仅由用户报告,但我对 SimpleDateFormater Calendar API的行为感到非常惊讶

请帮忙。

1 个答案:

答案 0 :(得分:2)

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

试一试,看看它是否有效