2015-08-01 5 views
1

Я пытался использоватьGoogle Hangouts, как «назад» TimeSpan

DateUtils.getRelativeTimeSpanString()

... генерировать истекшее время строки, подобные приложения Google Hangouts.

Однако, я получаю строки типа:

1 min ago 
58 min ago 
10 hours ago 
yesterday 
3 days ago 
1 week ago 

The приложение Hangouts показывает строки, как:

Now 
58 min ago 
11:05  (if time is more than 1 hour ago, it'll show the original time) 
yesterday 
Wed  (if the day was more than 1 day ago, it'll show the day) 
July 21 (if more than 1 wee ago, it'll show the date) 

Hangouts-подобный формат является то, что я ищу.

Любопытно, если я использую неправильные флаги с помощью этого метода или если приложение Hangouts использует другой метод/библиотеку для создания строк времени. Я мог бы выполнить пользовательскую реализацию, если DateUtils не предоставит то, что я ищу.

+0

Ваш вопрос не ясен. Если вы хотите показать дату-время, просто используйте форматтер, чтобы создать строковое представление даты и времени, избегая при этом относительного класса времени. Возможно, вы можете отредактировать свой вопрос, чтобы уточнить и опубликовать больше примеров того, что вы хотите. –

+0

Я добавил более яркий пример того, как DateUtils.geRelativeTimeSpanString(); возвращает строки временного интервала в зависимости от того, как приложение hangots отображает строки времени. – xsorifc28

ответ

0

я в конечном итоге делает комбинацию различных DateUtils форматтеров:

@SuppressLint("SimpleDateFormat") 
public static String getTimeSpanString(Context mContext, long time, boolean showTime) { 

    int flags = DateUtils.FORMAT_ABBREV_RELATIVE | DateUtils.FORMAT_ABBREV_ALL; 

    if(showTime) { 
     flags |= DateUtils.FORMAT_SHOW_TIME; 
    } 

    long now = new Date().getTime(); 
    long duration = now - time; 

    if(duration < DateUtils.HOUR_IN_MILLIS) { 
     return DateUtils.getRelativeTimeSpanString(time, now, 0, flags).toString(); 
    } else if (DateUtils.isToday(time)) { 
     SimpleDateFormat timeInstance; 
     if(DateFormat.is24HourFormat(mContext)) { 
      timeInstance = new SimpleDateFormat("HH:mm"); 
     } else { 
      timeInstance = new SimpleDateFormat("hh:mm a"); 
     } 

     return timeInstance.format(time); 
    } else if (duration < DateUtils.WEEK_IN_MILLIS) { 
     return DateUtils.formatDateTime(mContext,time,flags | DateUtils.FORMAT_SHOW_WEEKDAY); 
    } 

    return DateUtils.formatDateTime(mContext, time, flags | DateUtils.FORMAT_SHOW_DATE); 
} 
Смежные вопросы