GWT - конвертировать дату форматирования - PullRequest
0 голосов
/ 01 октября 2011

У меня есть следующий метод:

public static String formatDate(Date date) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    Calendar today = Calendar.getInstance();
    Calendar yesterday = Calendar.getInstance();
    yesterday.add(Calendar.DATE, -1);
    DateFormat timeFormatter = new SimpleDateFormat("hh:mma");
    DateFormat dateTimeFormatter = new SimpleDateFormat("MMM d, yyyy - hh:mma");

    if (calendar.get(Calendar.YEAR) == today.get(Calendar.YEAR) && calendar.get(Calendar.DAY_OF_YEAR) == today.get(Calendar.DAY_OF_YEAR) && calendar.get(Calendar.HOUR_OF_DAY) == today.get(Calendar.HOUR_OF_DAY) && calendar.get(Calendar.MINUTE) == today.get(Calendar.MINUTE)) {
        return "few seconds ago ";
    } else if (calendar.get(Calendar.YEAR) == today.get(Calendar.YEAR) && calendar.get(Calendar.DAY_OF_YEAR) == today.get(Calendar.DAY_OF_YEAR) && calendar.get(Calendar.HOUR_OF_DAY) == today.get(Calendar.HOUR_OF_DAY)) {
        return "few minutes ago ";
    } else if (calendar.get(Calendar.YEAR) == today.get(Calendar.YEAR) && calendar.get(Calendar.DAY_OF_YEAR) == today.get(Calendar.DAY_OF_YEAR)) {
        return "today " + timeFormatter.format(date);
    } else if (calendar.get(Calendar.YEAR) == yesterday.get(Calendar.YEAR) && calendar.get(Calendar.DAY_OF_YEAR) == yesterday.get(Calendar.DAY_OF_YEAR)) {
        return "yesterday " + timeFormatter.format(date);
    } else {
        return dateTimeFormatter.format(date);
    }
}

Любые идеи о том, как написать это на стороне клиента GWT?

Ответы [ 2 ]

2 голосов
/ 01 октября 2011

У меня есть четыре способа сделать это:

  1. Не на стороне клиента, а на стороне сервера.Календарь не эмулируется в GWT на стороне клиента.
  2. Если вы должны сделать это на стороне клиента, попробуйте использовать устаревшие методы в классе Date.Они все еще работают, и все они устарели в пользу методов в Календаре, так что вы просто немного откатитесь назад.
  3. Говоря о вращении назад часов, вы также можете просто переместиться вперед.Эмуляция календаря подходит к GWT, по крайней мере, это то, что я прочитал.Вы можете сделать (1) сейчас, а затем переместить этот метод к клиенту, когда прибудет Календарь.Кроме того, вы можете сделать (2) на данный момент и поменять его на исходный код на основе Календаря, когда прибудет Календарь.
  4. Используйте метод getTime () для Date (который не устарел)и эмулируется GWT на стороне клиента) и выполняет прямые целочисленные сравнения, чтобы определить, какую строку возвращать.getTime () возвращает миллисекунды, поэтому «несколько секунд назад» будет разница в 60 000 миллисекунд или меньше, «несколько минут назад» будет разница в 3 600 000 миллисекунд или меньше и т. д.

Перейти к 4.

Используйте методы в com.google.gwt.i18n.client.DateTimeFormat для форматирования даты / времени.

0 голосов
/ 01 октября 2011

gwttime - это порт Joda-Time для GWT, и он очень полезен для работы с периодами времени и продолжительностью.

В вашем случае вы можете создать DateTime s или LocalDateTime s, а затем создать Period с ними обоими, чтобы найти количество секунд, минут, часов, дней и т. Д. Между ними.

Например:

private static int daysBetween(LocalDateTime start, LocalDateTime end) {
    return new Period(start, end, PeriodType.days()).getDays();
}

Здесь будет указано количество полных дней между start и end.

Вы можете повторить это в течение нескольких секунд, минут и т. Д. И выполнить некоторую нечеткую логику с результатами, чтобы добраться до нужной выходной строки.

...