web-dev-qa-db-fra.com

TimeZoneInfo dans .NET Core via l'hébergement sur unix (nginx)

Par exemple, lorsque j'essaie de faire ce qui suit.

TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time")

J'obtiens l'erreur que la TimeZone n'est pas disponible sur l'ordinateur local. Quand je lance ceci localement cela fonctionne, mais là je l'exécute sur des fenêtres. Lorsqu'il est déployé, il s'exécute sur une machine Unix sous Nginx. Je peux voir que FindSystemTimeZoneById regarde dans le mauvais dossier quand il s'agit de Unix. Y a-t-il un moyen de faire fonctionner cela?

8
noshitsherlock

.Net Core utilisant le fuseau horaire du système. Malheureusement, Windows et Linux ont un système de fuseau horaire différent. Maintenant, vous avez deux moyens:

11
J. Doe

Pouvez-vous s'il vous plaît essayer cela?

   TimeZoneInfo easternZone;
        try
        {
            easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
        }
        catch (TimeZoneNotFoundException)
        {
            easternZone = TimeZoneInfo.FindSystemTimeZoneById("America/New_York");
        }

Vous pouvez consulter la liste des fuseaux horaires IANA ici https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

4
Alvaro Bardaji

Si vous voulez essayer un fuseau horaire Windows puis effectuer un repli sur un fuseau IANA si celui-ci n'existe pas:

var tzi  = TimeZoneInfo.GetSystemTimeZones().Any(x => x.Id == "Eastern Standard Time") ? 
    TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time") : 
    TimeZoneInfo.FindSystemTimeZoneById("America/New_York");
3
sam