javascript - 处理从 javascript 到 MySQL 到 javascript 到 MS SQL 到 javascript 的时区
问题描述
我正在使用 NodeJS/javascript 来确定具有系统时区的当前日期。现在我想用 UTC+0 将此日期插入 MySQL。之后,我想再次使用 UTC+0 从 MySQL 中使用 NodeJS/javascript 选择此日期,现在将其插入到我希望将其再次存储为 UTC+0 的 MS SQL 中。最后,我再次使用 NodeJS/javascript 进行选择,但这次来自 MS SQL,而且我希望这次的日期位于系统中现在使用的时区中,无论我将来在哪里。
这是一个示例:对于 01.01.2018 15:00:00 UTC+1(德国冬季时间),我希望它使用 UTC+0 存储在两个数据库中。当夏天来临时,我的系统时区更改为 UTC+2(德国夏令时),或者我使用 UTC-5 搬到另一个国家/地区,我想从 MS SQL 获取日期以转换为我的系统使用的时区自动。
所以问题是:
- 如何使用系统时区将我的日期从 NodeJS 插入到带有 UTC+0 的 MySQL?
- 我如何选择这个日期,以便我可以将它与 NodeJS 一起插入 MS SL 并且那里也是 UTC+0?
- 如何使用 NodeJS 从 MS SQL 中选择日期,以便它再次具有系统时区?
附加信息:我在 NodeJS 中有两个程序相互通信。第一个(客户端)在他的 MySQL 数据库中插入一个日期,并将这个日期也发送到服务器应用程序。他将其插入自己的 MySQL 数据库的原因是在服务器未运行时出于同步原因,以便下次获取它们。当服务器从客户端收到日期时,这些日期应存储在服务器 MS SQL 数据库中。服务器管理员可以随时将这些日期导出到 Excel 中。但是必须将日期从 MS SQL (UTC+0) 中的日期转换为服务器系统时区,以便在 excel 文件中日期位于系统时区而不是 UTC+0
解决方案
我认为可以在此解决方案中进行一些优化,但我将首先回答您的问题。
如何使用系统时区将我的日期从 NodeJS 插入到带有 UTC+0 的 MySQL?
new Date()
您可以使用- 将其转换为 MySQL 可以理解的 UTC 格式来获取系统时区new Date().toISOString()
要将此值存储在 MySQL 中,您需要一个DateTime字段。只需插入该值即可,但如果它不只是将其解析为日期。
我如何选择这个日期,以便我可以使用 NodeJS 将它插入 MS SQL 并且它也是 UTC+0?
好吧,您已经以始终为 UTC+0 的标准格式插入它。您只需选择它并插入它。
如何使用 NodeJS 从 MS SQL 中选择日期,以便它再次具有系统时区?
所以 - 您在 MS SQL 中有一个 DateTime 字段,您将通过 Node.JS 查询该字段 - 该字段在 UTC+0 中,您希望相应地获取服务器时区的时间吗?
好吧 - 如果你这样做new Date().getTimezoneOffset()
应该会给你你的时区偏移量。所以它应该变成这样:
var date = MSSQLWrapper.someOperation('select d_field from ...');
var offset = new Date().getTimezoneOffset(); // Your offset
date.setHours(date.getHours() + offset); // Add your offset
console.log(date) // your aligned date.
编辑
如果要更改从 SQL 中选择的时区,可以使用AT TIME ZONE
SELECT your_date from your_table
AT TIME ZONE 'Eastern Standard Time' AS my_new_date
您可以从服务器端在查询中传递时区名称。
或者您也可以查看TODATETIMEOFFSET
这个问题也有一些很好的例子:Convert datetime value from one timezone to UTC timezone using sql query
推荐阅读
- python - 如何在不导入的情况下从 python 文件中获取函数
- java - 如何在滚动折叠时将 recyclerview 推送到下方(后面)AppbarLayout
- docker - Docker 运行 -v 将卷从 Windows 主机链接到 linux 容器
- actionscript-3 - 如何让定时器倒计时 AS3
- dart - Dart VM 初始化失败:快照不兼容
- java - 当我使用 Keycloak 调用 API 安全端点时出现未经授权的错误 401
- amazon-web-services - 如何在 Cloudformation 中使用 Route53 创建动态数量的子域?
- html - 如何在没有空格的情况下更改特定字母的颜色
- python - Is there a way to log auto generated messages on Python console?
- apache-spark - 向 AWS EMR 集群提交 Spark 步骤时如何指定核心实例节点