octobre
2011
L’heure d’été [Daylight Saving Time (DST)] ou changement d’heure d’été est un peu complexe à gérer pour les applications informatiques. Car les règles du changement d’heure varient selon les fuseaux horaires (timezones). Voici une fonction CLR qui renvoie les périodes (date-heure) de début et de fin d’été pour le fuseau horaire actuel(Current TimeZone) de l’ordinateur qui l’exécute.
=> Le code C#
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Globalization;
using System.Collections;
public partial class DST
{
[Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "FillRow"
, TableDefinition = "Year int, StartDST Datetime, EndDST Datetime")]
public static IEnumerable F_DST(SqlInt32 StartYear, SqlInt32 EndYear)
{
ArrayList rowsArray = new ArrayList();
GetDST (StartYear,EndYear,rowsArray);
return rowsArray;
}
public static void GetDST(SqlInt32 StartYear, SqlInt32 EndYear, ArrayList rowsArray)
{
TimeZone tz = TimeZone.CurrentTimeZone;
DaylightTime daylight;
for (int i = (int)StartYear; i <= (int)EndYear; i++)
{
daylight = tz.GetDaylightChanges(i);
object[] column = new object[3];
column[0] = daylight.Start.Year;
column[1] = daylight.Start;
column[2] = daylight.End;
rowsArray.Add(column);
}
tz = null;
daylight = null;
}
private static void FillRow(Object obj, out SqlInt32 Year, out SqlDateTime StartDST, out SqlDateTime EndDST)
{
object[] row = (object[])obj;
Year = (int) row[0];
StartDST = (DateTime)row[1];
EndDST = (DateTime)row[2];
}
};
=> Prequis pour le déployement
RECONFIGURE WITH OVERRIDE
GO
ALTER DATABASE MA_BASE
SET TRUSTWORTHY ON;
GO
=> Déployement
Clique droit sur le projet > propriétés > et paramétrer les différents menu jusqu’au menu Déployer
Une fois le projet déployé, la fonction et l’assembly apparaissent dans la base de données.
Exemples d’utilisation de la fonction
———————————
–> Pour le fuseau horaire (GMT +01:00) Bruxelles, Copenhague, Madrid, Paris on a:
SELECT * FROM dbo.F_DST (2011,2012)
2011 2011-03-27 02:00:00.000 2011-10-30 03:00:00.000
2012 2012-03-25 02:00:00.000 2012-10-28 03:00:00.000
–> Pour le fuseau horaire (GMT -05:00) Est(Canada) on a:
NB : Après le changement du fuseau horaire n’oublier pas de redémarrer l’instance SQL SERVER pour prendre en compte ce changement.
———————————
Etienne ZINZINDOHOUE
———————————