在哪里可以获得一个简单的时区表,以便在SQL Server中使用?

Her*_*ill 7 sql sql-server asp.net timezone

我只需要创建一个时区的SQL表 - 此时,我唯一的需要是填充在线表单上的下拉列表.我正在设想一些简单的用于ISO代码,名称,UTC偏移的列,以及可能的代表性城市列表.我以为我可以轻松地在线找到复制粘贴的东西,但却无法找到任何东西.

我被这个问题引导到tz数据库,这是二进制形式,对于我需要的东西来说似乎有些过分.或者我可以从像TimeAndDate.com这样的网站拼凑这些,但这似乎比需要更多的工作.

或者我是以错误的方式解决这个问题 - 例如,我应该从服务器的操作系统获取此信息吗?

Nel*_*ias 17

所有时区的列表都在这里:

select * from sys.time_zone_info
Run Code Online (Sandbox Code Playgroud)

请享用!

  • 仅限SQL 2016+. (8认同)

mar*_*c_s 13

你是.NET 3.5吗?您可以轻松地在.NET 3.5中获取时区列表,然后在SQL Server数据库中存储该信息(或至少您需要它们).

您可以迭代.NET 3.5中可用且已知的所有时区,并将相关信息存储到SQL Server表:

ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();

foreach (TimeZoneInfo timeZone in timeZones)
{
    // store whatever you need to store to a SQL Server table
}
Run Code Online (Sandbox Code Playgroud)


Los*_*ear 6

我把marc_s的答案更进了一步 - 这是创建一个简单的时区表和.net代码的代码,它为每个UTC记录生成插入:

--TSQL TO CREATE THE TABLE
CREATE TABLE [dbo].[TimeZones] (
[TimeZoneID]           INT              IDENTITY (1, 1) NOT NULL,
[DisplayName]  VARCHAR(100) NOT NULL,
[StandardName]        VARCHAR (100)    NOT NULL,
[HasDST]    BIT  NOT NULL,
[UTCOffset]      INT NOT NULL
CONSTRAINT [PK_TimeZones] PRIMARY KEY CLUSTERED ([TimeZoneID] ASC)
);
GO
Run Code Online (Sandbox Code Playgroud)

为了生成插入语句,我使用visual studio创建了一个默认的web .net项目,并在视图中粘贴了它,运行项目然后复制渲染的代码(记得从视图源复制它,而不是直接从html页面复制) :

System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();

foreach (TimeZoneInfo timeZone in timeZones)
{
    Response.Write("INSERT INTO TimeZones (DisplayName, StandardName, HasDST, UTCOffset) VALUES ('" + timeZone.DisplayName.Replace("'", "''") + "', '" + timeZone.StandardName.Replace("'", "''") + "', '" + timeZone.SupportsDaylightSavingTime + "', '" + timeZone.BaseUtcOffset + "')" + Environment.NewLine);
} 
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助