SimpleDateFormat返回无效日期

时间:2013-07-29 07:43:20

标签: java simpledateformat

我面临着一个我以前从未见过的非常奇怪的问题。我有一个以毫秒为单位的日期,并希望将其显示为可读日期。这是我的代码:

if (validUntil == 0) {
  return activity.getResources().getString(R.string.forever);
} else {
  Date startDate = new Date(validFrom);
  Date endDate = new Date(validUntil);
  if (startDate.compareTo(endDate) < 0) {
    String date = sdf.format(startDate) + " - " + sdf.format(endDate);
    return date;
  } else if (startDate.compareTo(endDate) == 0) {
    return activity.getResources().getString(R.string.forever);
  }
}

如您所见,我只想创建一个显示时间跨度的字符串。当我调试到我的代码时,日期对象包含正确的值,而sdf.format(...)给我一个无效的日期。

示例:

  • startdate毫秒:1375017555000
  • startdate对象包含:Sun Jul 28 15:19:15 CEST 2013
  • sdf.format(startDate)返回:28.19.2013

我得到结束日期的结果。

我做错了什么?

3 个答案:

答案 0 :(得分:9)

可能您似乎使用mm来表示months,但它应该是MM。查看documentation

  

M月份

     每小时一分钟

尝试:

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");

答案 1 :(得分:5)

你得到分钟而不是几个月。你的模式应该是这样的:“dd.MM.yyyy”

答案 2 :(得分:0)

看起来您的日期格式字符串不正确。这有效:

public static void dateFormat(){
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(format.format(new Date()));
    }

结果:

2013年7月29日