Передача даты javascript в java - PullRequest
3 голосов
/ 03 января 2012

Я храню даты на стороне сервера в часовом поясе UTC. Когда клиент (браузер) хочет передать некоторую дату на сервер, он отправляет дату типа

"Tue Jan 03 2012 16:50:32 GMT+0400 (Russian Standard Time)"
  1. Является ли этот формат стандартным для всех браузеров?
  2. Если 1. ложно, как я могу переопределить функцию формата Date? Это хорошая практика?
  3. Как я могу конвертировать JS Date s в UTC java.util.Date с java.text.SimpleDateFormat?

UPDATE

Я думал, что передача даты в виде отформатированной строки (с частью часового пояса) вызовет меньшую головную боль, так как мне не стоит беспокоиться о преобразовании дат в UTC на стороне клиента. Поэтому я избегаю любых преобразований дат в коде JS.

Ответы [ 3 ]

3 голосов
/ 03 января 2012

Вы должны отправить количество миллисекунд с начала эпохи (1 января 1970 UTC), которое доступно через префиксный оператор +, как в +new Date(2012, 0, 1).

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

Чтобы ответить на ваши вопросы:

Является ли этот формат стандартным для всех браузеров?

Date.prototype.toString и toUTCString зависят от реализации, но toISOString надежен.

http://es5.github.com/#x15.9.5.43

15.9.5.43 Date.prototype.toISOString ( ) # Ⓣ Ⓡ

Эта функция возвращает строковое значение, представляющее экземпляр во времени, представленный этим объектом Date.Формат строки - это формат строки даты и времени, определенный в 15.9.1.15.Все поля присутствуют в строке.Часовой пояс всегда UTC, обозначается суффиксом Z. Если значение времени этого объекта не является конечным числом, генерируется исключение RangeError.

15.9.1.15 Формат строки времени даты # Ⓣ Ⓔ Ⓑ

ECMAScript определяет формат обмена строк для даты и времени на основе упрощения расширенного формата ISO 8601.Формат следующий: YYYY-MM-DDTHH:mm:ss.sssZ

Принимая во внимание, что http://es5.github.com/#x15.9.5.2 говорит

15.9.5.2 Date.prototype.toString ( ) # Ⓣ Ⓡ

Эта функция возвращает строковое значение.Содержимое строки зависит от реализации , но предназначено для представления даты в текущем часовом поясе в удобной для человека форме.

http://es5.github.com/#x15.9.1.15

15.9.5.42 Date.prototype.toUTCString ( ) # Ⓣ Ⓡ

Эта функция возвращает строковое значение.Содержимое строки зависит от реализации , но предназначено для представления даты в удобной для человека форме в UTC.

ПРИМЕЧАНИЕ. Цель состоит в том, чтобы создать представление строки вдата, которая более читаема, чем формат, указанный в 15.9.1.15.Необязательно, чтобы выбранный формат был однозначным или легко анализируемым машиной.Если реализация не имеет предпочтительного читаемого человеком формата, рекомендуется использовать формат, определенный в 15.9.1.15, но с пробелом, а не «Т», используемым для разделения элементов даты и времени.

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

Я не знаю, является ли этот формат стандартизированным для всех браузеров.

Но вы можете использовать функцию getTime() в JavaScript, которая возвращает миллисекунды с 1 January 1970 00:00:00 UTC и инициализирует Java Date object с этим значением.

1 голос
/ 03 января 2012

Вы можете отправить данные в формате UNIX , может быть?

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