如何将日期发布到java?

时间:2014-09-02 15:35:43

标签: java javascript ajax date

我总是有这种怀疑,总是遇到这个问题。问题是,例如,我有一个表单请求用户输入日期,并通过ajax将其发布到服务器,它接收日期字段作为日期类型。有时,我所做的是将不同的值发送到不同的参数中,如下所示:

{
    day: 18,
    month: 05,
    year: 2014,
    hour: 10,
    min: 30
}

然后在服务器中,根据收到的值生成Date类型。 但是,当然,我认为这不是一个好习惯,我开始制作这样的字符串:

{
     date: "2014-09-16T12:00:00Z"
}

但是这当然没有考虑用户的位置以保持相应的GMT + - ..

我还考虑过发布毫秒数,但是这里再次出现了GMT的问题..

我正在使用spring,只是为了记录。

那么,应该怎么做?这样做的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

以UTC格式思考和存储

通常最好在UTC中存储和处理日期时间值。转换为本地日期时间仅用于用户期望的演示。如果了解数据输入用户的time zoneoffset很重要,除了UTC值之外,还要单独记录。

询问时区

至于确定客户端计算机上用户的时区或偏移量,在Web浏览器中,您可以通过JavaScript询问other answer中的建议。但最终,如果时区或偏移非常重要,您应该询问用户。列出供他们选择的清单。使用proper time zone names,绝不使用3或4个字母代码。这些代码既不标准也不独特。

您无法信任用户计算机上的时钟。当您需要知道任何重要目的的当前时间时,请使用服务器的时间,因为您可以控制该计算机。并确保服务器计算机连接到一个或多个time servers

序列化为ISO 8601

将日期时间值序列化为字符串时,使用ISO 8601格式绝对是可行的方法。

Java 8中的新java.time包通过附加时区名称来扩展ISO 8601格式。有趣的想法,但不是标准的afaik。

不跟踪纪元的计数

通过计数跟踪日期时间,因为epoch对人类毫无意义,这使得调试和验证变得棘手且容易出错。日期时间库在内部跟踪纪元的计数。但是我们有这些库是有原因的,以使编程工作更容易和更正确。一些令人讨厌的人可能会建议这种方法。但他们常常天真地对待日期时间的工作是多么棘手和棘手。

此外,不同的环境和库使用不同的比例:整秒,millisecondsmicrosecondsnanoseconds。约two dozen epochs已用于各种计算机系统。

避免j.u.Date& .Calendar

永远不要使用与Java捆绑在一起的java.util.Date和.Calendar类。众所周知,它们很麻烦,应该避免。而是使用Joda-Time或添加到Java 8的新java.time package来取代那些旧类。

LocalDate&本地时间

Joda-Time这样的好库提供了何时只需要日期或时间而没有时区偏移的类。

但是不要使用这些认为忽略时区会让你的生活更轻松的想法。只有当您的意思是“公司政策是我们在底特律,马赛和赫尔辛基的工厂将在下午12:30停止午餐”时才使用这些。工厂不会同时停止,而是按照自己特定的12:30停止。

如果您的意思是公司总裁将在底特律时间上午10点进行网上直播,请将该值存储为UTC。然后在向用户介绍时,再次调整他们自己的底特律,马赛或赫尔辛基时间。

答案 1 :(得分:0)

在JavaScript中使用getTimezoneOffset()获取偏移量,然后将其应用于本地GMT中的所有时间

JavaScript getTimezoneOffset() Method