1

在我的应用程序中,我从 web 服务接收格式为yyyy-MM-dd(例如2016-03-05)的日期,我需要将它们格式化为 [abbreviated month] [date],例如Mar 5。此外,我有一个开始日期和结束日期,并希望将它们显示为日期范围,除非两个日期相同。

目前我正在使用DateUtils.formatDateRange(),它应该满足我的要求并提供适当的本地化,但我遇到了两个问题:

  1. 当我的结束日期是开始日期后的第二天时,formatDateRange() 仅显示格式化的开始日期。例如,如果开始日期是 2016-03-05并且结束日期是2016-03-06,则该方法返回Mar 5(但它应该是Mar 5 - Mar 6)。为什么会这样?

  2. 当结束日期在同一月份时,月份不显示。例如,如果开始日期是2016-03-05并且结束日期是 2016-03-12,则该方法返回Mar 5 - 12。有没有办法让它显示出来Mar 5 - Mar 12

这是我的代码:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date startDate, endDate;
try {
    startDate = sdf.parse(startDateString);
    endDate = sdf.parse(endDateString);
} catch (ParseException ignored) {
    return null;
}

int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_MONTH;
return DateUtils.formatDateRange(context, startDate.getTime(), endDate.getTime(), flags);
4

2 回答 2

2

在第一种情况下,日期格式化程序将您在该范围内的结束日期视为独占(而不是包含在该范围内)。如果您只是在结束日期上增加一毫秒,您将看到您期望的范围,因为现在日期范围包括结束日期的午夜时间点。

在第二种情况下,恐怕您符合日期格式的当前语言环境规则。您几乎必须接受 Android 认为的最佳格式,或者为您想要支持的每个语言环境制定自己的规则。

于 2016-03-03T01:15:16.327 回答
1
于 2017-05-12T05:17:46.183 回答