3

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

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

我得到了结束日期的类似结果。

我究竟做错了什么?

4

3 回答 3

9

可能您似乎习惯于mm表示months,但它应该是MM。查看文档

一年中的 M 月

m 分钟

尝试:

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
于 2013-07-29T07:45:55.913 回答
5

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

于 2013-07-29T07:47:33.490 回答
0

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

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

结果:

2013-07-29

于 2013-07-29T08:07:50.667 回答