如何将日期正确转换为 UTC 然后再转换回来?

2024-03-17

我正在努力将 DateTime 转换为 UTC、概念以及所有我无法正确理解的内容。

当我得到一个日期时间字符串,比如“7/10/2013”​​时,我只是这样做

  Convert.ToDateTime("7/10/2013").ToUniversalTime();

这会将其记录为“7/10/2013凌晨 4:00:00”在数据库中。服务器位于美国东海岸(-5)。当然,2013年7月期间,仍在观察DST,因此该时间段的偏移量为-4,这样多出的4个小时凌晨 4:00:00" 记录为 UTC。

当我写这篇文章时,现在是 2014 年 2 月,夏令时尚未生效,因此现在的偏移量为 -5。在我的应用程序中,这是我在应用程序中选择的偏移量。

如果我将 -5 偏移量应用于“7/10/2013 凌晨 4:00:00”,日期将为“7/09/2013 11:00:00 下午".

这是错误的,并且晚了一天。

问题#1

那么如何正确地将 UTC 时间转换回来呢?这意味着,当用户在 2014 年 2 月加载我的应用程序时(当前时区偏移量为 -5),7/10/2013 4:00:00AM 应该仍然是 7/10/2013,而不是 7/09/2013。

令我困惑的是,由于 .ToUniversalTime() 考虑了服务器 DST,是否存在一个不受服务器所在位置影响的硬集“通用时间”???

问题2

当我在西海岸和东海岸都有服务器写入数据库时​​,会发生什么?应用程序如何判断记录的 UTC 时间是基于东海岸还是西海岸?

基本上,代码如何判断“7/10/2013 4:00:00 AM”是在东海岸创建的 UTC 时间(表示美国东海岸为 7/10/2013 00:00:00AM)并且不是由西海岸的服务器发送(这表明美国西海岸的时间为 7/09/2013 20:00:00pm)?

抱歉,如果这听起来很愚蠢。任何建议表示赞赏。

==========最终编辑,我当前的解决方案==============

MiMo的回答很有道理。我对两件事感到困惑。

  1. 存储在数据库中的 UTC 时间对服务器意味着什么?
  2. 服务器时间与应用程序用户有什么关系?

我的应用程序可以由来自不同时区的用户使用,有些用户与服务器位于同一时区,有些则不是。有些旅行,因此即使他们与服务器位于同一时区,他们也可能始终落在不同的时区。我的应用程序允许他们选择所在的时区,从而适当地反映时间。

最初,我只是从数据库中获取 UTC 时间并从中减去用户的时区偏移量。正如 Mimo 所建议的,这是错误的。原因可以看我上面的帖子。

我最初的解决方案是立即获取服务器的时区偏移量并使用它来添加/减去 UTC,这也是错误的。截至 2013 年 7 月 10 日,服务器当时的偏移量为 -4。现在,2014 年 2 月,服务器时区偏移量为 -5。解决方案当然是使用 .ToLocalTime()

在深入研究 Mimo 关于如何使用 TimeZone.ToLocalTime() 的建议之前,我先介绍一下我临时解决该问题的方法。

  1. 从数据库中获取 UTC 日期并转换为服务器显示的 .ToLocalTime。因此对于服务器来说,7/10/2013 4:00:00AM 变为 7/10/2013 12:00:00AM。

  2. 获取服务器时区偏移量。目前显示 -5,因为它位于美国东海岸。

  3. 获取用户的时区偏移量。对于西海岸,用户现在选择-8。对于东海岸,用户现在选择 -5。

  4. 获取用户时区和服务器时区之间的差异。西海岸是-3。东海岸为0。

  5. 减去 7/10/2013 12:00:00AM 的差异,因此西海岸的预产期为 7/09/2013 21:00:00PM,东海岸的预产期为 7/10/2013 12:00:00AM。

全对了。

非常感谢大家。现在是时候深入研究 TimeZone.ToLocalTime() 并看看是否可以减少步骤 2-5。


如果您想将本地时间存储为 UTC,您需要首先将其转换为世界时间:

 DateTime dbDateTime = localDateTime.ToUniversalTime();
 ... store dbDateTime in the database ...

当您从数据库读回它时,它的 Kind 属性将设置为 Unspecified。您需要将其 Kind 属性显式设置为 UTC:

dbDateTime = ... get from database, e.g. (DateTime) reader["SomeDateTimeColumn"]
dbDateTime = DateTime.SpecifyKind(dbDateTime, DateTimeKind.Utc);

如果您想将其转换为当地时间,可以使用:

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

如何将日期正确转换为 UTC 然后再转换回来? 的相关文章

  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • JQuery Mobile 与 MVC 的链接

    我正在使用 ASP NET MVC 3 和 Razor UI 设置 JQuery 移动网站 我正在生成我的链接 例如 a href See Group 2 a 假设我从 Home Index 访问它 我遇到的问题是 当我点击链接时 它会出现
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 页面上使用 HTML Editor Extender 进行回发会导致 IE11 中出现 JavaScript 错误

    我已将 HTML 编辑器扩展程序添加到我正在处理的页面中 现在每当我在页面上发回帖子时 都会收到以下 Javascript 错误 JavaScript 运行时错误 参数无效 之后什么也没有发生 这在 IE10 或更低版本以及我所知道的所有其
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 将点击事件绑定到 jQuery Datatable on() 中的 tr 元素不起作用

    我正在开发一个包含所有用户的表 也可以通过单击表行并在单击执行后打开的表单中编辑数据来更改该表 如果我在页面加载时加载了所有用户 我的代码就可以正常工作 一旦我更改数据表以在数据表初始化时加载用户 它将仅在第一页上工作 如果我取消注释我的下
  • 当子类化 Ruby 哈希时,如何重写 []= 方法?

    我有一个扩展哈希的类 我想跟踪哈希键何时被修改 覆盖的正确语法是什么 key 语法方法来完成这个 我想插入我的代码 然后调用父方法 这可以用 C 方法实现吗 我从文档中看到底层方法是 rb hash aset VALUE hash VALU
  • Plone 工作流程的圣杯

    我们正在实施 Plone CMS 作为 ISO9001 文档的存储库 ISO 要求一定量的日志记录 任何熟悉该标准的人都可能知道 为了灵活性 我们希望合并 不按特定顺序 新的内容类型 需要合并企业中可能出现的不同文档 版本控制 表明我们的文
  • Maven 程序集插件在 jenkins 中重新下载依赖项

    由于某种原因 每次我尝试使用 Jenkins 构建项目时 maven 似乎都在尝试下载项目的依赖项 有一些问题 第一个是它根本不应该这样做 另一个问题是它甚至没有尝试从正确的存储库下载它们 这意味着它必须等待它们中的每一个都超时 我可以自己
  • 如何使geom_bar中的闪避与geom_errorbar、geom_point中的闪避一致

    我有一个数据集 其中在不同日期对不同组进行测量 我想要并排的条形图代表不同组在不同日期的测量值 条形图组根据测量日期间隔 并在它们上面覆盖误差条 我在躲避时遇到了麻烦geom bar同意闪避geom errorbar 这是一段简单的代码 d
  • 基于int数组创建WritableRaster

    我需要获取一个 int 数组并将其转换为 BufferImage 我真的对这个主题没有任何背景 我都是从互联网上学到的 所以这就是我想要做的 从 BufferedImage done 创建一个数组 将该数组转换为 IntBuffer don
  • TabIndex 无法正常工作的可能原因是什么

    所以我从 0 开始 为表单上的控件定义 tabindex 但在运行时一切都搞砸了 形式有点复杂 它有水平和垂直的分割器和面板 组框和一些旧的 VB 6 0 activeX 控件 它们内部是一个树控件 即使我以编程方式执行此操作并读取prev
  • 接口中的协变返回类型未通过 Javac 编译

    我有以下结构 public interface BarReturn public interface FooReturn public interface FooBarReturn extends FooReturn BarReturn p
  • 无法在 firebase 云函数中创建自定义令牌,因为服务帐户没有必要的权限

    打电话时admin auth createCustomToken 我收到以下错误 需要 iam serviceAccounts signBlob 权限才能对服务帐户项目 serviceAccounts k 执行此操作 电子邮件受保护 cdn
  • 使用 #!/usr/bin/php 时自定义 php.ini

    我有一个脚本 我试图在其中加载自定义php ini文件 该脚本通过以下方式在 nix 系统上运行 usr bin php qc path to php ini标头 然而 当这样做时 PHP 报告加载的php ini文件不存在 即没有加载 如
  • 在 ondrag 事件期间,pageX 和 pageY 在 Firefox 中始终设置为 0

    我正在实现一个可视化编辑器 允许用户将图像拖动到页面上 并将其他图像拖动到这些先前拖动的图像中 类似于 添加另一个图像 我基本上只需要拖动过程中的鼠标坐标 元素 hiliting 等 我使用基于这些坐标的自定义函数 问题是 在 Webkit
  • 升级 @ngrx/Store 时,“Action”类型上不存在属性“payload”

    我有 ngrx store打包在我的 Angular 4 x 应用程序中 并从 v 升级2 2 2 gt v4 0 0 我可以看到迁移注释说 Payload 属性已从 Action 接口中删除 然而 他们给出的例子似乎完全违反直觉 在我看来
  • 整个网页使用一个文件的优点和缺点? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不知道该怎么表达 但我会尝试一下 我最近开始用面向对象的 PHP 编写我的作品集 我想知道使用内容根据 SQL 数据和 GET 变量
  • 如何从 Android Fragment 禁用或隐藏抽屉布局

    我的应用程序中有 10 个不同的片段 我需要在几个片段中隐藏导航抽屉 抽屉布局 如何从片段访问抽屉布局并隐藏它 我知道我们需要在活动中使用mDrawerLayout setDrawerLockMode DrawerLayout LOCK M
  • VS 2010无法打开源文件“字符串”

    突然之间 我的 VS 2010 项目中的 Intellisense 开始变得疯狂 一切都正确构建 但它无法再找到基本的 C 头文件 如字符串 映射等 它不再识别 std 命名空间 而且通常会变得混乱 代码仍然可以编译 但无论我做什么 我都无
  • 服务器宕机时移动 SVN 存储库

    我的 SVN 服务器死了 我有另一台可以用作 SVN 服务器的机器 还有几台带有原始存储库的工作副本的机器 是否有一种干净的方法可以仅从当前工作副本在新服务器上重新创建存储库 历史是可以被遗忘的 我尝试创建一个新的存储库 破解其 UUID
  • 如何将字符串与整数进行比较

    In SQL Server 2012 我有一组列定义为VARCHAR 这些值是指标的阈值 可以是数字或字符串值 例如 温度的阈值是数字0 and 100 而门的阈值是open and closed 我想测试一个值 ResponseValue
  • 如何使 new FormData() 在 IE 浏览器上工作

    我怎样才能让这个在 IE 上工作 这在 IE 上不起作用 IE 浏览器不支持 new FormData api 是否有其他 api 相当于 IE 中的 new FormData var fd new FormData fd append u
  • Google Apps Script V8 分配给 null 会取消调试

    将变量赋值为 null 会导致调试取消该行的执行 这是重现该问题的测试脚本 function myFunction var a Hallo Logger log a a var b null Logger log b b 调试时 此脚本执行
  • 如何将日期正确转换为 UTC 然后再转换回来?

    我正在努力将 DateTime 转换为 UTC 概念以及所有我无法正确理解的内容 当我得到一个日期时间字符串 比如 7 10 2013 时 我只是这样做 Convert ToDateTime 7 10 2013 ToUniversalTim