存储时间信息:需要时区吗?

2024-01-04

我很想知道我正在考虑的是否是不好的做法,或者因为这是一个特定且经过深思熟虑的选择,所以它实际上是一个不错的主意。 我想存储特定城市发生的事件的日期信息。我想将该数据存储为 UTC 时间戳。 简单地存储时间戳和城市 ID/国家 ID(与特定时区相关),而不是存储每个事件的时区,这不是一个好主意吗? 我问这个问题是因为时区可以改变,但数据库中的城市 ID 永远不会改变。一旦服务器在(不太可能)时区更改事件中与最新时区同步,该事件将是独立的并且不受该更改的影响。然而,假设某个时区改变了其边界,那么之前在该时区发生的事件可能会在该时区之外。 这样做似乎不明智吗?我只是想知道,我一直在寻找最佳实践,但在这种情况下,这实际上似乎是一个不错的主意。这尤其有效,因为应用程序设计模型永远不会改变——事件将始终与特定城市相关联。

基本流程是:

  • 带有日期/位置的事件数据以 ISO-8601 YYYY-MM-DD 字符串等标准格式进入系统。

  • 系统将日期转换为 UTC 时间戳,并使用该时间戳和事件的城市 ID 存储事件的日期。

  • 当用户请求查看该事件时,系统会提取与该事件关联的时间戳和城市信息,并使用城市的时区来相应地设置显示日期的格式。

这是一个糟糕的主意吗?这样做有好处吗?存储 TZ 偏移量的概念是否与消除此问题的想法相同?


安排未来时间本质上是hard,因为你不知道未来会发生什么变化。这与记录过去的时间完全不同。

对于过去的时间事件,您真正需要的是本地日期和时间,以及与 UTC 的偏移量(许多平台将其称为“DateTimeOffset”)。

但对于未来的事件,您不一定知道偏移量是多少。你可以guess它是基于您当前对时区信息的了解,但该信息可能会发生变化。事实上,随着世界各国政府对夏令时和其他情况的改变,它每年都会发生多次变化。

由于您无法可靠地确定偏移量,因此您也无法确定准确的 UTC 时间戳。因此,保留原始当地时间非常重要。如果您要计算 UTC 时间戳,您还应该重新计算任何时候您更新时区数据。

我已经多次写过这个问题了(here https://stackoverflow.com/a/19627330/634824, here https://stackoverflow.com/a/19170823/634824 and here https://serverfault.com/a/554761/100701)。我建议你阅读这些帖子。

现在你提出了我以前没有提到的一点,否则我会把你的问题标记为重复。也就是说,如果事件地点完全因为时区边界发生变化而转移到新的时区,该怎么办?

我同意 Deceze 的观点,你需要考虑这种情况的可能性有多大以及失败的后果有多么严重。在我看来,这可能不值得投入大量时间。如果您将来安排了一个活动,并且该位置发生了新的时区,您可以随时返回并编辑该活动。您需要问自己您的应用程序需要了解多少有关时区更改的详细信息。我使用过的大多数调度系统都不处理这方面的问题。

如果你确实想处理这件事,那么你需要的不仅仅是城市。您应该存储该位置的纬度和经度坐标。然后你可以使用其中之一这些方法 https://stackoverflow.com/q/16086962/634824从这些坐标解析时区。但还要注意,您需要确保时区边界的来源尽可能是最新的。

另请注意,IANA 时区数据库 http://www.iana.org/time-zones这是时区数据的原始来源,根本不保留边界数据!大多数边界数据来自独立来源,例如Eric Muller 的 shapefile http://efele.net/maps/tz/world/,截至今天与 IANA 数据库的 2013b 数据(即 2013i)一致,因此时区数据至少有 7 次更新,这些更新要么没有更改任何边界,要么没有跟踪更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储时间信息:需要时区吗? 的相关文章

  • 为什么我应该使用 $_GET 和 $_POST 而不是 $_REQUEST? [复制]

    这个问题在这里已经有答案了 除此之外 REQUEST从 cookie 读取 有什么理由我应该使用 GET and POST代替 REQUEST 这样做的理论和实践理由是什么 当我只想让用户的某些数据返回某些数据时 我使用 REQUEST 当
  • 这些加密算法有什么区别?

    两者有什么区别MCRYPT RIJNDAEL 128 MCRYPT RIJNDAEL 256 MCRYPT BLOWFISH等等 哪一种最适合网络数据传输 Rijandel 是 AES 的另一个名称 AES 是当前的 一个好的标准 算法 数
  • 如何在 PHP 中正确分割路径

    执行以下操作的最佳方法是什么 我通过 AJAX 请求获取路径 e g dir1 dir2 dir3 dir4 我需要在我的网页上这样展示它 dir1 gt gt dir2 gt gt dir3 gt gt dir4 它们每个都是 html
  • Mysql - 如何比较两个 Json 对象?

    将整个 MySql json 列与 json 对象进行比较的语法是什么 以下不起作用 select count criteria from my alerts where criteria industries 1 locations 1
  • 如何从字符串中只获取数字? [复制]

    这个问题在这里已经有答案了 我有这样的字符串 第 001 课 完成 在这种情况下 我只想获取数字部分001 我试过这个 str the title preg match all d str matches number implode ma
  • 如何将 ctype_alpha 与 UTF-8 结合使用

    如何将 ctype alpha 与 UTF 8 一起使用 我有这个代码 if empty POST false if isset POST first name empty POST first name if ctype alpha PO
  • 将位置映射到时区

    我需要获取给定地址 位置的时区 假设如有必要 可以将地址 位置反向地理编码 使用谷歌 为纬度 经度 这意味着我可能没有邮政编码 我真的希望谷歌为此提供某种 API 但似乎他们没有 至少你可以在谷歌上搜索 华盛顿特区的时间 并获取时间 TZ
  • WHERE 子句或 ON 子句中的 INNER JOIN 条件?

    我今天输错了一个查询 但它仍然有效并给出了预期的结果 我的意思是运行这个查询 SELECT e id FROM employees e JOIN users u ON u email e email WHERE u id 139840 但我
  • 我应该为 MySQL 使用什么 python 3 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 据我所知 MySQLdb 仍然没有移植到 Python 3 pypy 上似乎有另一个名为 PyMySQL
  • 从提交的表单中转义字符串中的字符

    每次发布帖子时 我都会得到转义字符 gt gt gt 我有一个多步骤表单 它将数据从一种表单传输到另一种表单 我将这些值与准备好的语句一起保存在数据库中 数据库中的值当前看起来像Paul s House 用户应该可以在字符串中使用单引号和双
  • 使用 PDO 在 SQLite 中检索单个(且唯一)行的最简单方法

    我有这个 PDO stmt db gt prepare SELECT FROM channels WHERE id id stmt gt bindValue id id SQLITE3 INTEGER result stmt gt exec
  • 需要 mysqli_fetch_all 的替代方案

    我有一个 php mysqli 代码 可以找到一个我的本地服务器 但是在我的服务器上使用它时 我得到了一个 Fatal error Call to undefined function mysqli fetch all in home3 t
  • 无效的 PDO 查询不会返回错误

    下面的第二条 SQL 语句在 phpMyAdmin 中返回错误 SET num 2000040 INSERT INTO artikel artikel nr lieferant nr bezeichnung 1 bezeichnung 1
  • ON DUPLICATE KEY UPDATE 的自动增量过多

    我有一个包含列的基本表 id 主要是AI 名称 唯一 etc 如果唯一列不存在 则插入该行 否则更新该行 INSERT INTO pages name etc VALUES bob randomness ON DUPLICATE KEY U
  • Yii2 DropDownList Onchange 更改自动完成小部件“源”属性?

    我已经尝试过这个 yii2 依赖的自动完成小部件 https stackoverflow com questions 27025791 yii2 dependent autocomplete widget 但我不知道为什么它不起作用 这是我
  • 解析 PHP 响应:未捕获的语法错误:意外的标记 <

    我正在使用 AJAX 来调用 PHP 脚本 我唯一需要从响应中解析的是脚本生成的随机 ID 问题是 PHP 脚本会引发许多错误 这些错误实际上很好 不会妨碍程序功能 唯一的问题是当我跑步时 parseJSON response I get
  • 避免 SQLite3 中的 SQL 注入

    我正在尝试找出一种避免 SQL 注入的好简单方法 到目前为止我只能提出两个想法 对用户输入进行 Base64 编码 其实不想这样做 使用正则表达式删除不需要的字符 目前正在使用这个 不确定是否100 安全 这是我当前的代码
  • 从多个选择列表中插入数据到mysql数据库(html形式)

    我制作了一个表格 其中有商店的 ID
  • 如何显示不同页眉的页面? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在为我的学校项目开发网站 但我遇到了一个问题 我在每个页面上显示一个标题 我的标题之一包含登录表单 另一标题包含用户名 搜索栏等 问题是
  • NodeJS 和 PHP (Laravel) 集成用于 Socket.IO 实时聊天

    目前我有一个我写过的网站PHP通过Laravel 框架 我已经使用写了一个实时聊天nodeJS with 套接字IO and Express现在我想做的是将它集成到我已经编写的 Laravel 网站中 问题是聊天必须在主页中 当前由 Lar

随机推荐

  • 找不到netbeans 8.0.2中maven本地存储库路径的设置位置

    在 netbeans 中 当我转到 工具 gt 选项 gt Java gt Maven 面板时 显示 Maven 主页 捆绑Maven主页 https i stack imgur com 8yQIQ png 但是我在Netbeans 8 0
  • Heroku、Grails:如果使用多个 Web dyno,则会缺少资源

    我已经创建了 grails 应用程序并将其上传到 heroku 中 如果我使用 heroku 规模网络 1 一切看起来都不错 但如果我跑 heroku 规模网络 2 一些静态资源消失了 从日志中我可以看出 web 2 dyno 中的所有静态
  • 阴影位于文本上方

    我正在向 Xamarin UWP 项目添加阴影 但问题并不是真正特定于 Xamarin 而是一般来说是 UWP bool IsShadowSupported gt ApiInformation IsApiContractPresent Wi
  • 无法使用带有 connect 的 ref 调用子方法

    我想从子组件调用一个方法 按照这里的建议从父方法调用子方法 https stackoverflow com questions 37949981 call child method from parent 但是 当子组件使用来自react
  • 在 while 循环中延迟

    所以我想在 jquery 中执行延迟的 ajax 请求 直到收到特定的服务器响应 非空 我该怎么做呢 while data response null ajax done function data function doUntilResu
  • Python将列表分成n块

    我知道这个问题已经被讨论过很多次了 但我的要求不同 我有一个类似的列表 range 1 26 我想把这个列表分成固定数量n 假设 n 6 gt gt gt x 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1
  • 联合和结构初始化

    我偶然发现了一段基于 C 语言联合的代码 代码如下 union struct char ax 2 char ab 2 s struct int a int b st u 12 1 printf d d u st a u st b 我只是不明
  • 以最少的比较次数对数组进行排序

    我的计算机科学作业需要一些帮助 我需要编写一个排序例程 在最坏的情况下使用 7 次比较对长度为 5 的数组进行排序 我已经证明 由于决策树的高度 将需要 7 次比较 我考虑使用决策树 硬编码 但这意味着该算法非常复杂 并且我的导师暗示这不是
  • GWT MVP架构优势

    我正在学习 GWT 并且在多个地方读到 使用 MVP 架构最适合开发 GWT 应用程序 我还读到 使用 MVP ARCH 进行测试很容易 有人可以解释一下为什么使用 MVP 架构进行测试很容易 另外 我正在使用 MVP 开发一个项目 我发现
  • for 循环的简洁数学符号

    如果这不属于这里 我很抱歉 但我正在寻找一种方法来描述我的代码的数学背景 使用 numpy 我对两个以上的维数组求和 a shape 10 5 2 b shape 5 2 c a b c shape 10 5 2 是否有一个纯粹的数学符号
  • 如何将多个 actor 作为源附加到 Akka 流?

    我正在尝试构建并运行一个 akka 流 在 Java DSL 中 其中 2 个 actor 作为源 然后是一个合并结点 然后是 1 个接收器 Source
  • 在 Flutter 的 in_app_purchase 插件中使用 sandbox = true 调用 buyNonConsumable 方法,并在调用 queryPastPurchases 时获取 sandbox = false

    我正在测试 Flutter 的 in app purchase 插件 https github com flutter plugins tree master packages in app purchase https github co
  • 使用 ASP.NET Core 3 流式传输视频

    我目前正在 ASP NET Core 3 中构建 API 作为我使用 NET Core 的第一个项目 我目前正在尝试将视频发送到我的 React js 前端以在浏览器中观看 上传文件和视频确实可以正常工作 您在下面看到的方法也已经将文件发送
  • Scala Spark 将多个列对分解为行

    如何将多个列对分解为多行 我有一个包含以下内容的数据框 client type address type 2 address 2 abc home 123 Street business 456 Street 我想要一个最终的数据框 如下所
  • struct.error:解包需要 4 个字节的缓冲区

    我想将设备中的数据从咬合转换为浮动 我使用这个答案中的代码 浮动字节数 https stackoverflow com questions 5415 convert bytes to floating point numbers in py
  • Django 模板未加载

    我有一个名为 src 的项目和名为 app 的应用程序 并且我的应用程序中有一个模板文件夹 在我的模板文件夹中 我有另一个名为 Pages 的文件夹 我的 html 页面 base html 和 view html 驻留在其中 我的 vie
  • SwiftUI 文本视图不显示不可显示的字符

    我有 Swift 代码 可以解析 LLDP 链路层发现协议 帧 其中包括可以由供应商任意定义的字段 有时它是一个字符串 有时它是任意数据结构 以下是我如何获取数据并将其强制转换为具有 utf8 编码的字符串 let ouiString St
  • C# 读取USB描述符

    如何用C 读取USB描述符 我发现LibUSB NET但我无法像示例中那样获取 USB 设备 UsbRegDeviceList allDevices UsbDevice AllDevices 它返回计数 0 None
  • spring中使用@Bean和@Component的名称和别名

    我们如何定义 a 单一名字b 多个名称 别名 使用 Bean 和 Component 注释 在 XML 中我们这样定义 对于单个名称
  • 存储时间信息:需要时区吗?

    我很想知道我正在考虑的是否是不好的做法 或者因为这是一个特定且经过深思熟虑的选择 所以它实际上是一个不错的主意 我想存储特定城市发生的事件的日期信息 我想将该数据存储为 UTC 时间戳 简单地存储时间戳和城市 ID 国家 ID 与特定时区相