我想在数据类型为 datetime2(7) 的列中插入一个默认值。但是,由于我的网站托管在不同时区的服务器上,因此 getdate 函数无法正常工作。我想知道是否有解决方案。我做了一些研究,发现了两种方法。
首先是使用 GetUTCDate() 函数。但是,当我显示信息时,我需要进行转换。我确定我的 Web 应用程序仅用于我的时区。所以我想避免这种情况。
第二种方式,这是我可以通过使用 SwitchOffSet 函数完成的最接近的方式:
CREATE TABLE [dbo].[Test_Date](
[test_id] [int] NOT NULL,
[test_date] [datetime2](7) NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Test_Date] ADD CONSTRAINT [DF_Test_Date_test_date] DEFAULT (switchoffset(CONVERT([datetimeoffset],getutcdate()),'+13:00')) FOR [test_date]
GO
但是,我的问题是接下来几个月的 +13:00 原因,将是夏令时更改的 +12:00 原因。因此,我每次都需要更改它。有人对此有解决方案吗?
谢谢。
最佳答案
只需将数据以 UTC 格式存储,然后 use a calendar table在读取数据时计算偏移量(请参阅这些提示: part 1 、 part 2 、 part 3 )。有关的:
GET UTC Date of a past date
Daylight saving time and time zone best practices
Best Practices working with Datetimeoffset
how to convert all datetime columns in a sql server 2005 express database with data to UTC
Where to set a UTC datetime value in n-tier application: Presentation Layer, Domain, or Database?
How do I handle the timezones for every Chat message
关于sql-server - Getdate() 函数获取我的时区的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20086189/