Pour 3.5+ .NET, vous pouvez stocker l'identificateur de fuseau horaire du système avec l'utilisateur (vous pouvez obtenir ceux de TimeZoneInfo.GetSystemTimeZones
) et utiliser TimeZoneInfo
pour convertir entre les fuseaux horaires:
// In a User class that has a string timeZoneId field (for example)
public DateTime GetLocalDateTime(DateTime originalDate) {
DateTime utcDate = TimeZoneInfo.Local.ConvertToUtc(originalDate);
TimeZone userTimeZone = TimeZoneInfo.FindSystemTimeZoneById(this.timeZoneId);
return TimeZone.ConvertTime(utcDate, userTimeZone);
}
Dans .NET 2.0, vous êtes limité à l'ancienne classe TimeZone
qui est uniquement disponible pour le système local. Vous ne recevez pas automatiquement les informations sur l'heure d'été pour l'utilisateur, vous devez donc les stocker vous-même en même temps que le décalage GMT/UTC de base.
// In a User class that has a double utcOffset field (for example)
public DateTime GetLocalDateTime(DateTime originalDate) {
DateTime utcDate = TimeZone.CurrentTimeZone.ToUniversalTime(originalDate);
return utcDate.AddHours(this.utcOffset);
}
// Usage
DateTime localDate = user.GetLocalDateTime(DateTime.Now);
Dans quel format stockez-vous les données de fuseau horaire de votre utilisateur? –