【问题标题】:Regarding storing and showing date and time as per user time zone关于根据用户时区存储和显示日期和时间
【发布时间】:2026-02-19 14:10:01
【问题描述】:

有多少像 * 和 forum.asp.net 这样的在线论坛显示问题并发布带有日期和时间的答案?

他们如何将日期和时间存储到 sql server 表中?

他们是否以 UTC 格式存储日期和时间?

有时论坛会显示 8 小时前提出的问题以及 6.10 分钟前发布的答案。

他们如何将 utc 日期和时间与当前日期和时间区分开来? 以及他们如何区分存储 utc 日期和时间与用户时区时间?

假设我的网站和数据库托管在美国服务器上。 假设有人在 8 月 21 日早上 9:34 从印度问了一个问题,并且在 8 月 20 日晚上从美国发布了答案,但论坛显示的信息如下:

问题于 8 月 21 日 9:34 发布

并在 8 月 21 日 9:38 发布答案

这怎么可能? 是否显示正确的日期和时间?

请讨论我们应该如何以UTC格式将日期和时间存储在sql server db中,以及如何显示不会让读者产生混淆的结果。

指导我使用概念和示例。人们无需登录即可访问任何论坛问题。那么服务器如何知道用户来自哪个国家以及用户时区是什么?在asp.net中,我们可以从服务器端知道什么是用户时区吗?

当用户请求页面时,我们可以从文件中的代码知道什么是用户时区?

我看到论坛在将 html 传输到客户端之前在服务器端生成发布的问题和答案的日期和时间信息。那么任何网站如何知道用户从哪个时区请求页面。如果可能的话,我们可以将日期和时间转换为用户时区。

寻找指导方针。谢谢

【问题讨论】:

标签: asp.net sql-server datetime


【解决方案1】:

一般而言,日期和时间应以 UTC 格式存储,并且在 UI 层中仅显示为本地时间。

* 使用客户端 JavaScript 对其进行转换:

<span title="2015-08-28 09:19:09Z" class="relativetime" />

进入

<span title="2015-08-28 09:19:09Z" class="relativetime">24 mins ago</span>

timeago 是一个实现此技巧的 jQuery 插件示例)。

JavaScript 在客户端执行,因此它知道“浏览器”的时区是什么,这使得这成为可能。

在 ASP.NET Web 应用程序中确定时区是tricky

【讨论】:

  • 一个问题。假设我在谷歌中搜索了一些东西,然后点击了一个 * 链接,然后在我的浏览器中加载了一个页面。因此,当页面加载到我的浏览器中时,会在服务器端生成响应,然后 javascript 如何根据用户时区将日期和时间转换为本地时间,因为日期和时间是在服务器端生成的。
  • @Thomas Z 中的 2015-08-28 09:19:09Z 部分告诉 JavaScript 这是一个 UTC 时间。如果您知道您的本地时区偏移量,则从 UTC 转换为本地时间是微不足道的。
  • 所以你的意思是说UTC从服务器端渲染,当页面在客户端下载时,我们必须使用像moment.js这样的js库来转换这个UTC日期和时间2015-08-28 09 :19:09Z 到当地时间?我得到你正确吗?
  • Z 在日期时间数据中表示什么? z 表示它是 UTC 还是其他?
  • @Thomas 使用客户端 JS 将是最简单的解决方案。是的,Z 表示UTC