什么时候可以将日期时间存储为本地时间而不是 UTC?

2023-12-03

这是一个类似于this one.

我真的很想在我的应用程序中将日期时间存储为本地时间而不是 UTC(这被认为是最佳实践)。在应用程序中,我发生了许多事件,每个事件都分配给给定的位置。当我向用户显示它们时,我总是想显示local活动时间。 IE。:

====================================================================================
Event time (with TZ)   | As UTC           | As local time    | To be displayed  |
====================================================================================
2014-01-15 22:30 GMT   | 2014-01-15 22:30 | 2014-01-15 22:30 | 2014-01-15 22:30 |
2014-01-15 23:30 GMT+1 | 2014-01-15 22:30 | 2014-01-15 23:30 | 2014-01-15 23:30 |
2014-01-16 00:30 GMT+2 | 2014-01-15 22:30 | 2014-01-16 00:30 | 2014-01-16 00:30 |
====================================================================================

如果我决定以 UTC 格式存储事件时间:

  • 显示它们将很困难(因为对于每个事件,我都需要该事件的时区并格式化该时区的日期)。

  • 查询它们将非常困难(即,如果我想显示当地时间 2014 年 1 月 15 日发生的所有事件,我需要每个事件将该事件的时间与该事件中“2014-01-15”的含义进行比较时区。不确定这在 SQL 中是否可能......)

如果我决定将事件时间存储为当地时间:

  • 我将无法比较不同地点的活动时间(但这对我来说没问题)

由于在应用程序的绝大多数情况下,我对当地时间(通常显示所谓的“电视时间”)感兴趣,并且在很多情况下我创建新的日期时间对象(为此我需要位置时区),我相信在这种情况下将日期时间保存为当地时间是合理的。

你认为是吗?存储当地时间还有哪些其他缺点?

预先感谢您的关注和帮助。


最常被忽视的情况not使用 UTC 是为了安排future次 - 特别是在复发模式.

想象一下,如果您的闹钟是按 UTC 安排的。假设您将其设置为每天上午 7:00。在 DST 转换后的第二天,您会在上午 6:00 或上午 8:00 醒来,具体取决于转换的方向。

此外,我们确定时区偏移和夏令时变化的规则会一直更新!所以你不能把未来的本地时间转换为 UTC 时间而不需要also保留当地时间本身。否则,当事情发生变化时,你就不会有原始的真理来源,你的所有时间都会再次消失。

我已发布于this many times before.

当然,一旦事件发生,您肯定希望记录 UTC 时间,或者使用日期时间偏移量.

另一个常见的用例是没有时间的日期,尤其是生日和其他周年纪念日。这些应该始终存储为年、月、日(例如在date大多数数据库中的字段类型) - 时区或 UTC 之间没有转换。

关于您的具体观点:

如果我决定以 UTC 存储事件时间...将很难显示它们...

这实际上很容易。几乎每个编程环境都可以轻松做到这一点。唯一困难的地方是在非本地时区的 JavaScript 中,并且有一些库可以解决这个问题。

如果我决定以 UTC 存储事件时间...查询它们将非常困难(即,如果我想显示当地时间 2014 年 1 月 15 日发生的所有事件,我需要每个事件比较该事件的时间'2014-01-15' 在该事件的时区中意味着什么。不确定这在 SQL 中是否可能......)

那是真实的。每个人的“今天”都是不同的。如果您需要与浮动“日”相关的数据,那么这是不存储在 UTC 中的另一种情况。然而,一个DateTimeOffset会给你两者的优点。

如果我决定将活动时间存储为当地时间...我将无法比较不同地点的活动时间(但这对我来说没问题)

不仅如此。没有偏移量的本地 DateTime 可能会不明确夏令时回退过渡。因此,您可能有一个本地值,但您无法区分它对应于两个时间点中的哪一个。

关于“电视时间”——将该概念保留给真正“浮动”的事物。示例:一家公司在世界各地设有办事处,办事处均在上午 8:00 开始工作。那是一段漂浮的时光。

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

什么时候可以将日期时间存储为本地时间而不是 UTC? 的相关文章

随机推荐

  • Puppeteer 不会更改选择器

    我正在尝试自动执行查询数据的任务这个网站使用木偶师 因此 我需要选择数据集 每日摘要 第一个选项 然后选择位置类型 州 第三个选项 然后选择州 阿拉斯加 第二个选项 问题是我的代码没有更改为下一个表 因此 它不是在选择数据集中的第一个选项
  • python 函数中的调和平均值?

    我有两个函数可以给出精确度和召回率分数 我需要在使用这两个分数的同一库中定义一个调和平均函数 函数如下所示 这是函数 def precision ref hyp Calculates precision Args ref a list of
  • 从异步函数返回值node.js

    我知道这是 javascript 中关于函数异步行为最常见的问题 我仍然无法为我的用例找出可行的解决方案 我想做的是使用键查找 redis 缓存 我正在使用存在函数来检查密钥是否存在 如果存在 那么我将从缓存返回 如果不存在 那么我将设置该
  • Safari 媒体查询打印未正确使用 100% 高度

    我正在对一个应用程序使用打印媒体查询 该应用程序在 Chrome Edge Firefox 上运行良好 但在 Safari 上失败 我使用高度 100 是为了让它填充打印页面 在 safari 上它似乎使用百分比作为元素本身的百分比 我在下
  • 未处理的 Promise 拒绝:this._next 不是函数:@angular/fire/messaging 中的区域

    当我在前台收到 firebase 推送通知时 通过使用 angular fire messaging 方法是 this angularFireMessaging messages subscribe payload gt console l
  • 如何在 Javascript 中设置 cookie 在 1 小时后过期?

    如何设置此 cookie 在当前时间一小时后过期 document cookie username value expires WHAT GOES HERE path Code var now new Date var time now g
  • Socket.io android java客户端接收消息和发送文件示例

    有谁有任何示例代码演示如何在 java 客户端上接收 socket io 的消息 另外 是否有从同一个 socket io java 客户端发送文件 二进制 图片的示例 基本上是来自java而不是javascript客户端的示例代码 and
  • Datagrid wpf C# 应用程序中的复选框

    我正在使用数据网格为学生记录创建一个 C wpf 应用程序 如何在标题中创建复选框以选择 取消选择一行中的所有复选框 如何一键选中行中的复选框以便我们可以编辑 删除记录 我们如何选择多个复选框来删除 我创建了一种行为 允许将控件中的属性绑定
  • 如何在 tsql contains 函数中搜索 &(与号)?

    我有一个表 T 其中有一个列 C 其中包含包含字符 的文本 但是如果我执行以下查询 它不会返回任何内容 尽管我可能有 10 行 SELECT FROM T WHERE Contains C a b 使用双引号使其成为搜索词 SELECT F
  • 从 Asm 访问 C 中定义的全局变量

    我有一个包含全局变量 foo 的 C 文件 我如何访问foo来自另一个汇编程序 我使用 i586 elf as GNU 汇编器 和 i586 elf gcc gnu 编译器 进行构建 您可以只使用交易品种名称 as将所有未定义的符号视为外部
  • EF Core DB First,以及如何避免模型生成时的构造函数覆盖

    我将不再对 Azure DB 使用 SQL 身份验证 而是使用 Active Directory 托管身份验证 如此处所述article 基本上 我正在做两件主要的事情来使其正常工作 1 在 DBContext 构造函数中注入令牌 publ
  • 在 Azure 上部署 Django 应用程序:即使在部署后也仅显示默认应用程序

    我正在尝试将 Web 应用程序部署到 Azure 我正在遵循这些指示https azure microsoft com en us documentation articles web sites python create deploy
  • 通过类路径执行 java -jar vs 在 jar 文件目录中执行 java -jar

    使用 NetBeans 创建 Java 程序后 将其称为 Addition 然后在文件夹 c Users Ben Doc NetBeansProjects Addition dist 中成功清理并构建可执行 Jar 文件 为什么在执行时 从
  • 使用ajax时如何清除缓存数据?

    我正在使用 Ajax 根据某些 ID 从服务器检索数据 如下所示 以执行自动建议功能 但是 当我提交表单并更新数据库时 自动建议字段假设不应再包含此 ID 的任何内容 但它仍会从缓存中检索数据 有谁知道如何清除缓存并使Ajax发送请求以在每
  • 如何使用 WatiN 检查 PDF 是否在浏览器中成功打开?

    我正在使用 WatiN 库在部署后对网站进行快速冒烟测试 除此之外 我想确保当我单击页面上的特定链接时 会在浏览器中打开 PDF 单击链接很容易 但如何检测 Acrobat Reader 是否已在浏览器窗口中成功打开 我想捕获 404 服务
  • /d2vzeroupper MSVC 编译器优化标志有什么作用?

    是什么 d2vzeroupperMSVC编译器优化标志在做什么 我正在阅读此编译器选项快速参考指南 对于 AMD 的 Epyc CPU https developer amd com wordpress media 2020 04 Comp
  • Android导入库

    在我的项目中 我需要使用外部库 该库包括 class文件 我已使用此库将文件夹添加到我的项目中属性 gt Java 构建路径 gt 库 gt 添加类文件夹 我可以毫无问题地编译项目 但是当我运行它时 我得到failed resolving
  • 使用 websocket 发送私人消息

    我们如何使用 Websockets 和 PHP 实现私人消息系统 客户端到客户端 据我了解 服务器广播消息 所有客户端都可以通过 connection onmessage 事件处理程序接收消息 我想知道是否有一种方法可以将消息仅发送给网络套
  • UWP DatagramSocket 多播

    我设法制作了一个简单的应用程序 可以从多播组发送和接收数据 如果我打开应用程序的 2 个实例 具有相同代码的 2 个不同的 sln 文件 我可以发送和接收数据 问题是 5秒后 如果我从Client001发送消息 只有Client001会收到
  • 什么时候可以将日期时间存储为本地时间而不是 UTC?

    这是一个类似于this one 我真的很想在我的应用程序中将日期时间存储为本地时间而不是 UTC 这被认为是最佳实践 在应用程序中 我发生了许多事件 每个事件都分配给给定的位置 当我向用户显示它们时 我总是想显示local活动时间 IE E