2009-10-15 6 views
5

Ho solo bisogno di creare una tabella SQL dei fusi orari - a questo punto, il mio unico bisogno è compilare un elenco a discesa su un modulo online. Sto immaginando qualcosa di semplice con colonne per codice ISO, nome, offset UTC e forse un elenco di città rappresentative. Pensavo di poter trovare facilmente qualcosa online su copia e incolla, ma non sono stato in grado di localizzare nulla.Dove posso ottenere una tabella semplice di fusi orari da utilizzare nel server SQL?

Sono stato diretto da this question allo tz database, che è in forma binaria e sembra eccessivo per quello che mi serve. In alternativa potrei metterlo insieme da siti come TimeAndDate.com, ma sembra più lavoro di quello che dovrebbe essere necessario.

O sto andando su questo nel modo sbagliato - ad es. dovrei ricevere queste informazioni dal sistema operativo del server?

+0

Dipende da cosa si sta tentando di fare e perché è importante sapere. Puoi utilizzare javascripts date-object sul modulo online per scoprire in quale fuso orario l'utente ha configurato il proprio computer in modo che si trovi (non necessariamente dove si trova al momento) – some

risposta

12

Are You On .NET 3.5? È possibile ottenere facilmente un elenco di fusi orari in .NET 3.5 e quindi archiviare tali informazioni (o almeno tutto ciò che è necessario) nel database di SQL Server.

Si potrebbe iterare su tutti i fusi orari disponibili e conosciuti per .NET 3.5 e memorizzare le informazioni pertinenti a una tabella di 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

Perfetto, grazie. –

6

ho preso marc_s rispondere un ulteriore passo avanti - ecco il codice per creare un semplice tavolo fuso orario e il codice .NET che genera gli inserti per ogni record 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 

per generare le istruzioni di inserimento, ho creato un NET progetto web predefinito utilizzando visual Studio e nella vista ho incollato questo, ha eseguito il progetto e poi copiato il codice di reso (ricordarsi di copiarlo da fonte vista, non da direttamente la pagina 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); 
} 

Speranza questo aiuta

1

l'elenco di tutti i fuso orario sono qui:

select * from sys.time_zone_info 

Enjoy!

+2

Solo SQL 2016+. – Ray