java - 日期应该如何发布到java?

标签 java javascript ajax date

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

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

然后在服务器中,根据收到的值创建日期类型。 但是,当然,我认为这不是一个好的做法,我开始制作这样的字符串:

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

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

我也想过发布毫秒,但这里又出现了 GMT 的问题..

我正在使用 spring,仅供记录。

那么,应该怎么做呢?执行此操作的最佳做​​法是什么?

最佳答案

以 UTC 时间思考和存储

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

询问时区

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

您不能信任用户计算机上的时钟。当您出于任何重要目的需要了解当前时间时,请使用服务器的时间,因为您可以控制该计算机。并确保服务器计算机已连接到一个或多个 time servers .

序列化为 ISO 8601

将日期时间值序列化为字符串时,使用 ISO 8601格式绝对是要走的路。

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

不跟踪纪元的计数

按照 epoch 以来的计数跟踪日期时间对人类来说毫无意义,这使得调试和验证变得棘手且容易出错。日期时间库在内部跟踪纪元的计数。但我们拥有这些库是有原因的,为了让编程工作更容易、更正确。一些极客类型的人可能会建议这种方法。但他们常常天真地意识到约会工作是多么棘手和棘手。

此外,不同的环境和库使用不同的刻度:整秒、milliseconds , microseconds ,和nanoseconds 。关于two dozen epochs已被用于各种计算机系统中。

避免使用 j.u.Date 和 .Calendar

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

本地日期和本地时间

好的库,例如 Joda-Time当您想要仅显示日期或仅显示时间而无需时区偏移时,可以提供类(class)。

但不要认为忽略时区会让您的生活更轻松。仅当您的意思是“公司政策是我们位于底特律、马赛和赫尔辛基的工厂将在中午 12:30 停止吃午餐”时才使用这些内容。工厂不会同时停止,而是在各自特定的 12:30 停止。

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

关于java - 日期应该如何发布到java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25627192/

相关文章:

java - 策略设计模式

java - 使用 java api 发送邮件

java - 使用 jpathwatch 找出程序何时完成写入文件

javascript - 超出最大调用堆栈大小 - reactjs

javascript - 如何减少聊天​​的 AJAX 请求数量?

javascript - AJAX POST 不适用于 javascript 到 nodejs

javascript 安全问题 (jQuery DataTables)

java - 问题: Jersey umarshalls parameter QueryParam/PathParam as null

ajax - 跨域访问 USPS 地址验证 API

javascript - 根据文件选择器选择更改 div 背景