我有一个正在编写的 Web 应用程序(C#、MSSQL),当记录存储在系统中时,我需要存储时间戳。通常,我只使用 SQL 和 DATETIME 函数来执行此操作。但是,服务器位于与我们公司所在的不同时区......我们可能会更改到完全不同时区的另一台服务器。托管公司不会更改服务器时间以匹配我们本地的时区。 (不是我责怪他们,但这是我尝试过的一件事。)
那么,我的问题是,存储记录更新的日期/时间的最佳方式是什么,以及将日期/时间返回给本地时区用户的最佳方式是什么?
我希望以最简单的方式执行此操作,因此只要解决方案易于实现,C# 和 SQL 的组合就可以了。 (如果重要的话,我通常的风格是在存储过程中做更多的工作,在 C# 中做更少的工作。)
你能给我一些示例代码吗?谢谢!
最佳答案
始终以协调世界时(UTC 又名 GMT)存储 DATETIME 数据
- 这避免了所有时区问题
- 这避免了夏令时问题
- 这允许简单的日期数学始终有效
- 这允许不同时区的交易保持同步
- 这允许您将数据移动到不同时区的不同服务器,而不是搞砸一切
- 等“通用”时间,有意义吗?
C# DateTime 提供了DateTime.UtcNow 和ToLocalTime(),SQL 提供了GETUTCDATE()。这是一个将 UTC 转换为本地时间的 SQL 函数 -
-- convert UTC to local time
create FUNCTION [dbo].[udfUtcToLocalTime]
(
@gmt datetime
)
RETURNS datetime
AS
BEGIN
DECLARE @dt datetime
SELECT
@dt = dateadd(millisecond,datediff(millisecond,getutcdate(), getdate()),@gmt)
RETURN @dt
END
例子:
SELECT dbo.udfUtcToLocalTime(someDateTimeField)
FROM someTable
关于c# - SQL中如何处理时间存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/220405/