如何在Java中格式化日期范围?

3
在Java中,我有两个日历对象,它们包含日期和时间。这两个日历对象在同一天,但时间不同。如何将其格式化为以下示例:
星期三,2013年11月8日 10:00AM-11:00AM
谢谢。

2
你尝试过什么吗? - Sotirios Delimanolis
2个回答

3
你应该使用SimpleDateFormat来完成它,这里有文档和一个示例:
String dFormat = "EEEE, MMMM d, yyyy",
       tFormat = "KK:mm a";

public String formatInterval(Date from, Date to) {
    SimpleDateFormat dateFormat = new SimpleDateFormat(dFormat),
                     timeFormat = new SimpleDateFormat(tFormat);

    StringBuilder s = new StringBuilder();
    // Day
    s.append(dateFormat.format(from));
    s.append(' ');
    // Start time
    s.append(timeFormat.format(from));
    s.append(" - ");
    // End time
    s.append(timeFormat.format(to));
    return s.toString();
}

public String formatInterval(Calendar from, Calendar to) {
    return formatInterval(from.getTime(), to.getTime());
}

1
只有一件事 - SimpleDateFormat 不是线程安全的(它实际上存储了上一个调用的数据),如果访问不正确,可能会导致极其奇怪的输出。一般来说,最好每次运行格式化程序时创建一个新实例,以避免这个问题(字符串格式可以全局保存)。 - Clockwork-Muse
@Clockwork-Muse 谢谢!我根据您的建议修改了代码。 - Tobias
1
然而,Java编码标准建议每行只声明一个变量。 - Clockwork-Muse

1
我建议使用DateUtils:
String range = DateUtils.formatDateRange(mContext, startDate.getMillis(), endDate.getMillis(), DateUtils.FORMAT_ABBREV_TIME);

starDate和endDate来自jodaTime,如果你使用“Date”,则需要通过Calendar将其转换为毫秒。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接