Использовать локальные настройки пользователя для отображения даты под Java - PullRequest
4 голосов
/ 06 января 2012

У меня есть проект Grails

Customer customer = Customer.get(params.id)

, где клиентом является класс домена

мне нужно отобразить

Date date = customer.createDate

в локальной настройке пользователя

Я могу использовать Java или Grails или Groovy или html или javascript , чтобы сделать это

Пример:

if date  = "2012-01-01 00:00:00.0" in GMT
then user must display it as "2012-01-01 01:00:00.0" in London (GMT +1)

какая-нибудь помощь в использовании локальной настройки пользователя для отображения даты?

Ответы [ 7 ]

2 голосов
/ 24 января 2012

показать этот сайт http://www.pageloom.com/automatic-timezone-detection-with-javascript это полезно

загрузите jstz.min.js и добавьте функцию на свою html-страницу

<script language="javascript">
    function getTimezoneName() {
        timezone = jstz.determine_timezone()
        return timezone.name();
    }
</script>

и назовите эту функцию своим тегом

0 голосов
/ 24 декабря 2015

Я знаю, что это старый вопрос, но недавно я создал плагин Grails, который использует библиотеку javascript jstz, чтобы решить эту проблему для вас:

https://grails.org/plugin/timezone-detection

0 голосов
/ 06 января 2012

В Grails есть тег <g:formatDate />. В вашем контроллере вы можете вызвать его как метод g.formatDate (). Я думаю, что он использует текущий язык пользователя для отображения даты.

0 голосов
/ 06 января 2012

Если вы еще не знаете часовой пояс пользователя, вам понадобится некоторый клиентский JavaScript для передачи этой информации на ваш сервер.

var   d =new Date();
d.getTimezoneOffset();   //  send this value to the server

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

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

Если ваша отформатированная строка всегда должна читаться как ГГГГ-ММ-ДД ..., включите следующий код в раздел страницы:

   <script type="text/javascript" language='JavaScript'>
       <!--
        function formatDate(millis) {
           var      d =new Date(millis);
           return d.getFullYear() +"-" +(d.getMonth() +1) +"-" +d.getDate() +" " +d.getHours() +":" +d.getMinutes() +":" +d.getSeconds() +"." +d.getMilliseconds();
           }
    // -->
</script>

Затем, где бы на странице вам ни понадобилась форматированная дата, включите следующий код JavaScript

<script type="text/javascript" language='JavaScript'>
<!--
    document.write(formatDate(XXXX));
// -->
</script>

Замена XXXX на дату в миллисекундах.Например, если вы генерируете страницу с использованием JSP, то в своем коде Java используйте

request.setAttribute("dateInMillis", date.getTime());

, а затем в своем JSP используйте JavaScript сверху, заменив XXXX следующим образом:

document.write(formatDate(${dateInMillis}));
0 голосов
/ 06 января 2012

некоторые фиктивные коды, как показано ниже:

SimpleDateFormat.getDateInstance(SimpleDateFormat.LONG, Locale.CHINA).format(customer.createDate()).toUpperCase();
0 голосов
/ 06 января 2012

Поскольку вы используете платформу Grails, я бы посоветовал вам взглянуть на тег g: formatDate .Он позволяет указать формат и локаль (внутренне он использует SimpleDateFormat).

0 голосов
/ 06 января 2012

Java имеет класс java.text.DateFormat для форматирования дат.Вам нужно будет передать пользователю Locale, чтобы получить экземпляр, чтобы отобразить дату на предпочитаемом им языке.И вам придется установить TimeZone пользователя в DateFormat для отображения даты в часовом поясе пользователя.

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