2013-11-02 5 views
2

В java у меня есть два объекта календаря, которые содержат дату и время. Оба объекта календаря находятся в тот же день, но будут иметь разные времена. Как я могу отформатировать его, чтобы выглядеть следующим образом, например:Как форматировать диапазон дат в java?

среда, 8 Ноября 2013 10:00 AM-11:00AM

Спасибо.

+2

Вы что-нибудь пытались сделать? –

ответ

3

Вы должны использовать SimpleDateFormat, чтобы сделать это, вот the docs и пример:

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» не является потокобезопасным (он фактически хранит данные из предыдущего вызова), что может привести к крайне странному выводу при неправильном доступе. Вообще говоря, лучше всего создавать новый экземпляр каждый раз, когда вы запускаете форматировщик, чтобы избежать этой проблемы (однако формат строки можно сохранить глобально. –

+0

@ Clockwork-Muse Спасибо! Я адаптировал код в соответствии с вашими предложениями. –

+1

... er, а стандарт кодирования Java рекомендует только одно объявление в строке. –

0

Я бы рекомендовал DateUtils:

String range = DateUtils.formatDateRange(mContext, startDate.getMillis(), endDate.getMillis(), DateUtils.FORMAT_ABBREV_TIME); 

(звездную и ENDDATE взяты из jodaTime, если вы используйте «Дата», вам нужно преобразовать его в миллисекунды через Календарь)

Смежные вопросы