【发布时间】:2012-01-25 05:12:59
【问题描述】:
我需要将我的 ASP.NET 的默认时区设置为亚洲/达卡或 GMT+6 时区。但我找不到在全球范围内改变它的方法。 Stackoverflow 和其他网络上有很多参考资料可以通过获取时区信息并在每次我需要 DateTime 对象时计算正确时间来做到这一点。
但是相信我,我不想这样做。所以不要给我任何这样的建议。我想最好从 web.config 将时区设置为 Asia/Dhaka 或 GMT+6。 (类似于我们在 php 中使用 php.ini 执行的操作)所以每次我需要 DateTime 对象时,无论服务器的时区是什么,都会使用我的时区评估时间。
这可能吗?如果可能那怎么办?? 提前感谢您的解决方案:)
【问题讨论】:
-
为什么你不想把事情做好?请记住,
DateTime没有 固有时区。 (在某些方面,这是一种非常奇怪的类型。)您应该通常(但不总是)将所有内容都保留在 UTC 中,而不是当它去往或来自用户时 - 为什么你不想遵循那个常见的模式? -
问题是我有很多超过 100 个 aspx 页面的日期时间对象,并且需要在本地时区呈现它们。我不反对每次都保持 UTC。但我需要一个解决方案,用于在 aspx 页面中呈现本地时区时间而不更改所有页面。
-
听起来您真正需要的是一个放置
DateTime渲染代码的中心位置,然后您可以在任何需要的地方调用渲染一个DateTime。您可能需要一次更改所有 100 个页面,但是对您需要呈现日期/时间的方式的任何进一步更改只需要在一个地方进行更改。 -
@JonSkeet ,我在一家拥有 20 名开发人员和 10 个不同 C# 项目的公司工作。如果有一种方法可以简单地更改 app/web.config 中的配置设置并使 DateTime.Now 考虑到定义的时区,它将为每个人节省大量时间和错误,不是吗? (而不是试图让每个人都使用 DateTime.UtcNow)。 *这是安装在远程计算机上的 WPF 客户端应用程序,由于客户端连接问题,我们需要记录本地时间(无法将其传递到数据库,然后才记录 DateTime.Now)
-
@UriAbramson:不,我认为这不是更好的解决方案。基本上,这将是您的开发人员使用错误的 API 的贴膏药。
DateTime.Now按照它所说的去做 - 它返回系统本地时间。如果您尝试指定不同的时区,那么这不是您想要的行为,因此您不应该使用该属性。