Редактировать
Остерегайтесь этой строки: long last24hTimestamp = current - MILLISECONDS_PER_DAY;
Я рассчитываю от имени времени UTC.
Чтобы узнать местное время, вы должны принять во внимание часовой пояс.
Таким образом, в основном вы должны вычислить, находится ли отметка времени timeInMillis
в течение последних 24 часов, затем использовать один формат, в противном случае использовать другой формат.
Это поможет вам:
public static final long MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;// In real app you should pre-calculate this value
public static final String RECENT_DATE_FORMAT = "HH:mm";
public static final String OLD_DATE_FORMAT = "E' at 'HH:mm";
public static String displayTime(long timestamp) {
long current = System.getCurrentTimeMillis();
long last24hTimestamp = current - MILLISECONDS_PER_DAY;
if (timestamp > last24hTimestamp) {
// Received message within a day, use first format
SimpleDateFormat sdf = new SimpleDateFormat(RECENT_DATE_FORMAT);
return sdf.format(new Date(timestamp));
} else {
// Message is older than 1 day. Use second format
}
}
Что-то, о чем вы должны позаботиться:
Рассмотрите возможность анализа с часовым поясом / локализацией, если ваше приложение работает в нескольких местах
Если вы используете Java 8, попробуйте использовать DateTimeFormatter
. Это потокобезопасно, и вы можете использовать статический экземпляр для формата даты, не нужно инициализировать SimpleDateFormat
каждый раз, когда вы хотите отформатировать дату