Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 保存和检索从客户端到数据库的时间_Javascript_Java_Timezone - Fatal编程技术网

Javascript 保存和检索从客户端到数据库的时间

Javascript 保存和检索从客户端到数据库的时间,javascript,java,timezone,Javascript,Java,Timezone,在我的一个web应用程序中,我必须安排一个事件。 我的服务器、客户端和数据库位于不同的时区。 客户端将安排一个事件,服务器必须执行该事件 我该怎么做 目前,我正在从客户端发送事件的时间(以毫秒为单位,从纪元开始):(使用javascript中日期的getTime()方法) 在服务器中,我使用Java将其转换为日期对象,并将其作为日期类型值存储在数据库中 在数据库中,存储的值比我从客户端提供的值晚了一天。 为什么会这样?如何将时间存储在服务器中?当您存储时间时,最好将时间存储在epoch time

在我的一个web应用程序中,我必须安排一个事件。 我的服务器、客户端和数据库位于不同的时区。 客户端将安排一个事件,服务器必须执行该事件

我该怎么做

目前,我正在从客户端发送事件的时间(以毫秒为单位,从纪元开始):(使用javascript中日期的getTime()方法)

在服务器中,我使用Java将其转换为日期对象,并将其作为日期类型值存储在数据库中

在数据库中,存储的值比我从客户端提供的值晚了一天。
为什么会这样?如何将时间存储在服务器中?

当您存储时间时,最好将时间存储在epoch time(或者unix time,如果您愿意的话)中的任何位置,并在前端对其进行反序列化。这意味着您可以确信自己坚持了正确的时间,然后可以在前端转换它。在不知道细节的情况下,我怀疑您在Java中创建的日期对象导致了偏移,然后您在数据库中存储了错误的日期值

在存储时间时,最好将其存储在epoch时间(或者unix时间,如果您愿意的话)中的任何地方,并在前端反序列化它。这意味着您可以确信自己坚持了正确的时间,然后可以在前端转换它。在不知道细节的情况下,我怀疑您在Java中创建的日期对象导致了偏移,然后您在数据库中存储了错误的日期值

你的问题重复了许多其他问题。所以我会简短地说

有两种方式可以表示三种日期时间值:

  • 如果实际时间已经过去(付款、收到发票、送达法庭文件、货物到达等),或者如果将来您知道您希望在时间线上有一个特定的时间,则存储和交换日期时间的值,无论政客是否重新定义时区(如更改)。对于Java,使用类。在SQL中,使用带时区的时间戳
  • 存储和交换日期时间不带区域/偏移的值,以安排未来事件足够远,政治家可能会更改时区规则(明年的牙科预约、两个月后的采访、政党公告等)。世界各地的政客都表现出了玩弄我们的时钟的癖好,通常没有什么警告,有时只是提前几周通知。对于Java,使用类。在SQL中,使用不带时区的时间戳。要显示计划,请使用
    zoneDateTime
    class,通过方法在Java中生成瞬态数据
  • 存储和交换日期时间对于非特定事件,如圣诞节开始或说“我们在德里、杜塞尔多夫和底特律的所有工厂将于今年10月30日中午关闭半天”,不带区域/偏移值我们指的是当地时间的正午,而不是同时的中午。对于Java,使用类。在SQL中,使用不带时区的时间戳
作为程序员和系统管理员,学习在UTC和24小时内思考。在工作中忘记你自己的狭隘时区吧。在办公室保持第二个时钟设置为UTC

您如何知道用户的预期/期望时区?最终,唯一确定的方法是问她/他

序列化为文本时,请使用标准格式

避免使用糟糕的旧日期时间类,如
java.util.date
java.sql.date
等。这些类现在是遗留的,被业界领先的优秀java.time类所取代

表示中时间线上的一个时刻

为了向用户演示,请将UTC调整为他们期望/期望的时区。可以这样想,在这里存储对键的引用,然后使用检索到的键来查找本地化的文本值

切勿使用3-4个字符的伪时区。拥有
大陆/地区
名称,如
亚洲/加尔各答
太平洋/奥克兰

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
请注意,数据库在处理日期时间方面差异很大。SQL标准几乎没有涉及这个主题。研究文档并进行实验,以确保您了解其行为。JDBC驱动程序也是如此。提示:对和有一些最好的支持

使用和更高版本,通过调用以下命令,通过java.time对象与数据库交换数据:

  • PreparedStatement::setObject
  • ResultSet::getObject
示例代码

myPStmt.setObject.( … , myInstant ) ;
……还有

Instant instant = myResultSet.getObject( … , Instant.class ) ;

你的问题与许多其他问题完全相同。所以我会简短地说

有两种方式可以表示三种日期时间值:

  • 如果实际时间已经过去(付款、收到发票、送达法庭文件、货物到达等),或者如果将来您知道您希望在时间线上有一个特定的时间,则存储和交换日期时间的值,无论政客是否重新定义时区(如更改)。对于Java,使用类。在SQL中,使用带时区的时间戳
  • 存储和交换日期时间不带区域/偏移的值,以安排未来事件足够远,政治家可能会更改时区规则(明年的牙科预约、两个月后的采访、政党公告等)。世界各地的政客都表现出了玩弄我们的时钟的癖好,通常没有什么警告,有时只是提前几周通知。对于Java,使用类。在SQL中,使用不带时区的时间戳。要显示计划,请使用
    zoneDateTime
    class,通过方法在Java中生成瞬态数据
  • 存储和交换日期时间值,对于非特定事件,如圣诞节开始或说“我们在德里、杜塞尔多夫和底特律的所有工厂”,不带区域/偏移
    Instant instant = myResultSet.getObject( … , Instant.class ) ;