Как использовать java.util.Calendar в GWT - PullRequest
19 голосов
/ 10 августа 2011

Мне нужно использовать java.util.Calendar в точке входа GWT, но я получил ошибку при запуске приложения, потому что GWT не может найти исходный код, есть ли я в любом случае, чтобы решить эту проблему.

Заранее спасибо !!!

Ответы [ 6 ]

19 голосов
/ 10 августа 2011

java.util.Calendar не является эмулируемым классом.Вы можете найти список эмулируемых классов здесь:

http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.html

Я бы настоятельно рекомендовал не использовать библиотеку дат / календарей на стороне клиента.Вы, вероятно, только попадете в беду.На самом деле, хотя java.sql.Date и java.util.Date эмулируются в GWT, я бы не стал их использовать.Если вы хотите использовать Календарь, скорее всего, вы хотите поддерживать часовые пояса на клиенте.Используя эмулированные классы Date, вам нужно каким-то образом преобразовать Date клиента из часового пояса браузера в некоторый целевой часовой пояс (GMT или что-либо другое, определенное пользователем в пользовательских настройках?).Это определенно будет подвержено ошибкам.Использование GWT TimeZone добавляет другие проблемы.Например, как вы сопоставляете временные зоны Java и часовые пояса GWT?

Я рекомендую выполнять все манипуляции с датами и форматирование на сервере.На клиенте вы можете просто использовать триплет дата / месяц / год.Сервер может иметь связь между пользователем (или организацией) и java.util.TimeZone (или часовым поясом joda).Используя триплет и часовой пояс, вы можете легко создать конкретный экземпляр во времени.

16 голосов
/ 01 августа 2013

Вы можете использовать com.google.gwt.user.datepicker.client.CalendarUtil.

5 голосов
/ 10 августа 2011

Нет, нет способа использовать java.util.Calendar в GWT, потому что в JavaScript нет эквивалента. Но есть принятый запрос функции для него. Может быть, вы найдете несколько подсказок в комментариях к запросу.

3 голосов
/ 30 сентября 2013

Ниже показано, как использовать Joda Time для извлечения любой информации о дате из типа Java Date с функцией Joda Times format() и использования ее для построения new Date() с использованием функции parse() Joda Time.

static DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss.SSS");
static DateTimeFormat datefmt = DateTimeFormat.getFormat("yyyy-MM-dd ");
static DateTimeFormat timefmt = DateTimeFormat.getFormat("HH:mm:ss.SSS");

public Date getDateTime(Date date, Date time) {
    String datetime = datefmt.format(date) + timefmt.format(time);
    return dtf.parse(datetime);
}
0 голосов
/ 31 июля 2013

Для тех, кто предпочитает реализацию математики напрямую, вот решение о том, как добавить дни в существующий объект даты без использования Календаря или каких-либо устаревших функций:

private Date addDays(Date dateIn, int numDays)
{
   long milisPerDay = 86400000;

   // convert the dateIn to milliseconds
   long dateInMilis = dateIn.getTime();

   // add numDays to the date
   dateInMilis = dateInMilis + (numDays * milisPerDay);

   return new Date(dateInMilis);
}


Вот как получить текущий год в виде строки (очень полезно для уведомлений об авторских правах)

long time = System.currentTimeMillis();
long milisPerYear = new BigInteger("31536000000").longValue();
String currentYear = String.valueOf((int) Math.floor(time / milisPerYear) + 1970);

Поиск констант, таких как количество миллисекунд в дне, году и т. Д., Очень прост в Google. Самое сложное - сложить месяцы, поскольку количество миллисекунд в месяце будет зависеть от месяца. Если есть какая-либо потребность в этом, я был бы рад написать функцию и опубликовать ее здесь, чтобы сложить и вычесть месяцы.

0 голосов
/ 10 августа 2011

Вы пытались добавить фактический код класса в свой проект?Некоторые классы Java SDK хорошо компилируются, хотя их нет в белом списке JRE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...