gpt4 book ai didi

javascript - 从客户端到数据库保存和检索时间

转载 作者:行者123 更新时间:2023-11-28 14:46:28 25 4
gpt4 key购买 nike

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

我该怎么做?

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

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

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

最佳答案

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

有两种方法来表示三种日期时间值:

  • UTC 中存储和交换日期时间值如果实际时刻已经过去(付款、收到发票、送达法院文件、 cargo 到达等),或者如果将来您知道您想要时间轴上的特定时刻,无论政治家是否重新定义时区,例如随着变化Daylight Saving Time (DST) 。对于 Java,请使用 Instant类(class)。在 SQL 中使用TIMESTAMP WITH TIME ZONE
  • 存储和交换日期时间没有区域/偏移的值,用于安排 future 的事件在未来足够远的地方,政治家可能会改变时区规则(明年 dentry 预约,两个月后面试,聚会公告等)。世界各地的政治家都表现出了摆弄我们的时钟的倾向,通常没有什么警告,有时只提前几周通知。对于 Java,请使用 LocalDateTime类(class)。在 SQL 中,使用TIMESTAMP NOT TIME ZONE。要呈现时间表,请使用 ZonedDateTime 类在 Java 中生成 transient 数据,通过 Instant::atZone方法。
  • 存储和交换日期时间非特定事件的无区域/偏移值,例如圣诞节开始或说“我们在德里、杜塞尔多夫和底特律的所有工厂将关闭今年 10 月 30 日中午半天”,我们指的是各自本地时间的中午,而不是同一时间的中午。对于 Java,请使用 LocalDateTime类(class)。在 SQL 中,使用TIMESTAMP NOT TIME ZONE

作为程序员和系统管理员,学会用 UTC 和 24 小时时间来思考。在工作中忘记您自己的狭隘时区。在办公室将第二个时钟设置为 UTC。

您如何知道用户期望/期望的时区?最终唯一可靠的方法是询问她/他。

序列化为文本时,使用标准 ISO 8601格式。

避免使用可怕的旧日期时间类,例如 java.util.Date 和 java.sql.Date 等。这些现在已成为遗留物,已被优秀的日期时间类所取代。业界领先的 java.time 类。

Instant代表 UTC 中时间线上的一个时刻。

Instant instant = Instant.ofEpochMilli( millis ) ;

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

切勿使用 3-4 个字符的伪时区。 True time zones具有大陆/地区名称,例如Asia/KolkataPacific/Auckland

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

请注意,数据库在处理日期时间方面差异很大。 SQL 标准几乎没有触及这个主题。研究文档并进行实验以确保您了解其行为。您的 JDBC 驱动程序也是如此。提示:Postgresdate-time types有一些最好的支持和 functions

JDBC 4.2然后,通过 java.time 对象与数据库交换数据,方法是:

  • PreparedStatement::setObject
  • ResultSet::getObject

示例代码

myPStmt.setObject.( … , myInstant ) ;

…还有…

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

关于javascript - 从客户端到数据库保存和检索时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46219252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com