Play Framework: Как определить часовой пояс для даты, введенной пользователем? - PullRequest
2 голосов
/ 05 марта 2012

В моем приложении Play Framework у пользователя есть возможность ввести дату для расписания, затем эта дата сопоставляется с моей моделью:

@InFuture
@As("dd/MM/yyyy HH:mm")
public Date validFrom;

Это поле в форме

<input type="text" name="schedule.validFrom" placeholder="dd/mm/yyyy hh:mm">

Проблема в том, что наш сервер работает в нелокальном часовом поясе, и часовой пояс следует брать из объекта, для которого составляется это расписание.

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

Возможное решение - отправить дату в виде строки и выполнить ручную проверку и анализ, но мне интересно, есть лиэто лучшее решение.

Ответы [ 3 ]

2 голосов
/ 06 марта 2012

Ручной анализ, вероятно, является лучшим вариантом.
Вы можете создать свой собственный объект, содержащий дату и часовой пояс.
Затем реализовать свою собственную проверку правильности на основе InFutureCheck и выполнить часовой пояспреобразование.

0 голосов
/ 28 июня 2012

Лучшая практика здесь действительно зависит от того, нужно ли вашим пользователям видеть несколько часовых поясов.

  • Если они не нуждаются в нескольких часовых поясах, вы можете предположить, что все времена «беззональные», то есть все они в формате UTC или GMT. Это безусловно самый простой вариант.

  • Если пользователям необходимо видеть несколько часовых поясов, лучше всего указывать часовой пояс с каждой датой с параметром Z: http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#rfc822timezone Между тем, в Javascript вы, вероятно, захотите использовать библиотеку для создать строку даты с часовым поясом, например: http://arshaw.com/xdate/#Formatting

0 голосов
/ 05 марта 2012

Лучшим вариантом будет предоставить пользователю выпадающий список часовых поясов.Например:

String TIMEZONE_ID_PREFIXES ="^(Africa|America|Asia|Atlantic|Australia|Europe|Indian|Pacific)/.*";
String[] ids = TimeZone.getAvailableIDs();
Timezone tz = null;
for (int i=0; i<ids.length; i++) {
  if (ids[i].matches(TIMEZONE_ID_PREFIXES)) {  
    //add TimeZone.getTimeZone(ids[i]).getDisplayName() to a drop down list
  }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...