将javascript日期传递给java
我在服务器端以UTC时区存储日期。 当客户机(浏览器)希望向服务器传递某个日期时,它会发送如下日期将javascript日期传递给java,java,javascript,formatting,Java,Javascript,Formatting,我在服务器端以UTC时区存储日期。 当客户机(浏览器)希望向服务器传递某个日期时,它会发送如下日期 "Tue Jan 03 2012 16:50:32 GMT+0400 (Russian Standard Time)" 这是所有浏览器的标准格式吗 如果1。如果为false,如何重新定义日期格式函数?这是一种好的做法吗 如何使用java.text.simpleDataFormat将JSDates转换为UTCjava.util.Date 更新 我认为将日期作为格式化字符串传递(带有时区部分)会减少
"Tue Jan 03 2012 16:50:32 GMT+0400 (Russian Standard Time)"
日期
格式函数?这是一种好的做法吗李>
java.text.simpleDataFormat
将JSDate
s转换为UTCjava.util.Date
我认为将日期作为格式化字符串传递(带有时区部分)会减少麻烦,因为我不必费心在客户端将日期转换为UTC。因此,我避免在JS代码中进行任何日期转换。您可以使用格式发送数据,也许?我不知道这种格式是否适用于所有浏览器
但是您可以使用JavaScript中的函数,该函数返回自1970年1月1日00:00:00 UTC以来的毫秒数,并使用此值初始化Java。您应该发送自纪元(1970年1月1日UTC)以来的毫秒数,该毫秒数可通过
+
前缀运算符获得,如+新日期(2012,0,1)
发送任何带有时区的内容都需要两台机器具有相同的时区定义,这意味着您可能会遇到一些微妙的错误,即两个日期在一台机器上以一种顺序出现,但在另一台机器上以不同的顺序出现。您可以通过使用millis-since-epoch表示法来消除这类bug
回答您的问题:
这是所有浏览器的标准格式吗
Date.prototype.toString
和toutString
都依赖于实现,但toISOString
是可靠的
15.9.5.43Date.prototype.toISOString()
#Ⓣ Ⓡ
此函数返回一个字符串值,该字符串值表示此日期对象表示的时间实例。字符串的格式为15.9.1.15中定义的日期-时间字符串格式。字符串中存在所有字段。时区始终为UTC,由后缀Z表示。如果此对象的时间值不是有限数,则会引发RangeError异常
15.9.1.15日期时间字符串格式Ⓣ Ⓔ Ⓑ
ECMAScript基于ISO 8601扩展格式的简化定义了日期时间的字符串交换格式。格式如下:YYYY-MM-DDTHH:MM:ss.sssZ
鉴于说
15.9.5.2Date.prototype.toString()
#Ⓣ Ⓡ
此函数返回一个字符串值。字符串的内容取决于实现,但旨在以方便的、人类可读的形式表示当前时区中的日期
15.9.5.42Date.prototype.toutString()
#Ⓣ Ⓡ
此函数返回一个字符串值。字符串的内容取决于实现,但旨在以方便的、人类可读的UTC格式表示日期
注:目的是生成一个比15.9.1.15中规定的格式更可读的日期字符串表示形式。选择的格式不必是明确的或易于机器分析的。如果实现没有首选的人类可读格式,建议使用15.9.1.15中定义的格式,但使用空格而不是“T”分隔日期和时间元素
客户端代码是什么样子的?如果它可以传递“从Unix纪元开始的毫秒数”值,这将更简单,只需要简单的整数解析。请参阅@jon skeet,查看我的更新。谢谢。@plasticrabit:JavaScript
Date
已经知道了自epoch以来的UTC毫秒数-最好不要引入时区。我担心JavaScript.getTime()返回当前时区调整值。@plasticrabit:it不应该。。。当你说你“害怕”时,你是说你担心文档可能不正确,还是说你尝试过,看到了错误的值?