2009-10-15 14 views
5

Solo necesito crear una tabla SQL de zonas horarias; en este punto, mi única necesidad es completar una lista desplegable en un formulario en línea. Estoy visualizando algo simple con columnas para código ISO, nombre, compensación UTC y tal vez una lista de ciudades representativas. Pensé que podría encontrar fácilmente algo en línea para copiar y pegar, pero no he podido encontrar nada.¿Dónde puedo obtener una tabla simple de zonas horarias para usar en el servidor SQL?

Fui dirigido por this question al tz database, que está en forma binaria y parece exagerado para lo que necesito. Alternativamente, podría juntar esto de sitios como TimeAndDate.com, pero eso parece ser más trabajo de lo que debería ser necesario.

¿O estoy haciendo esto de la manera incorrecta - p. ¿Debería obtener esta información del sistema operativo del servidor?

+0

Depende de lo que intenta hacer y por qué es importante saberlo. Puede usar javascripts date-object en el formulario en línea para averiguar en qué zona horaria el usuario ha configurado su computadora para estar (no necesariamente donde se encuentran en este momento) – some

Respuesta

12

está usted en .NET 3.5? Puede obtener fácilmente una lista de zonas horarias en .NET 3.5 y luego almacenar esa información (o al menos lo que sea que necesite) en su base de datos de SQL Server.

Se podría iterar sobre todas las zonas horarias disponibles y son conocidos para .NET 3.5 y almacenar la información relevante a una tabla de SQL Server:

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

foreach (TimeZoneInfo timeZone in timeZones) 
{ 
    // store whatever you need to store to a SQL Server table 
} 

Marc

+0

Perfecto, gracias. –

6

Tomé marc_s responder a un paso más allá - aquí está el código para crear una sencilla tabla de zona horaria y el código .NET que genera los insertos para cada registro 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 

para generar las instrucciones de inserción, creé una proyecto web por defecto .NET utilizando visual Studio y en la vista pegué esto, corrió el proyecto y luego se copia el código rendido (recuerde que debe copiarlo de ver código fuente, no directamente desde la página 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); 
} 

esperanza esto ayuda

1

la lista de todos zona horaria está aqui:

select * from sys.time_zone_info 

Enjoy!

+2

SQL 2016+ solamente. – Ray

Cuestiones relacionadas