234 messaggi dal 08 marzo 2012
Ciao,

su una web application gestisco il multi culture, ovvero l'utente nel proprio profilo gestisce lingua, culture e timezone (intesa come elenco dei fusi orari).

Il problema è che in paesi come l'Italia per esempio abbiamo anche ora legale e solare e ovviamente vorrei gestirne il cambio in automatico.
Deve necessariamente chiedere nel profilo utente anche il paese oppure esiste un modo "automatico"? Vorrei evitare di chiedere info inutili all'utente che diventano poi lunghe e noiose da impostare.

Sul database archivio tutte le date in UTC e poi le converto sul frontend in base alle impostazioni.

Grazie!
234 messaggi dal 08 marzo 2012
Nessuna idea a riguardo?

Grazie e ciao!
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
non ho capito bene se devi tenere disgiunta la lingua dal fuso orario.
Vuoi consentire ai tuoi utenti di selezionare l'italiano come lingua e un fuso orario diverso da quello che si usa in Italia (es. Pacific Standard Time)?

Se sì
dovresti far selezionare all'utente uno dei valori che arrivano dal metodo TimeZoneInfo.GetSystemTimeZones();
Ecco un esempio che stampa id e nome per ciascuno. Tu ovviamente dovrai usare questi valori per costruire un menu a tendina.
var zones = TimeZoneInfo.GetSystemTimeZones();
foreach (var zone in zones)
{
   Console.WriteLine(zone.DisplayName + " (" + zone.Id + ")");
}

Ecco alcuni esempi:
(UTC-02:00) Coordinated Universal Time-02 (UTC-02)
(UTC-02:00) Mid-Atlantic - Old (Mid-Atlantic Standard Time)
(UTC-01:00) Azores (Azores Standard Time)
(UTC-01:00) Cabo Verde Is. (Cape Verde Standard Time)
(UTC) Coordinated Universal Time (UTC)
(UTC+00:00) Dublin, Edinburgh, Lisbon, London (GMT Standard Time)
(UTC+00:00) Monrovia, Reykjavik (Greenwich Standard Time)
(UTC+00:00) Sao Tome (Sao Tome Standard Time)
(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna (W. Europe Standard Time)
(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague (Central Europe Standard Time)


Gli oggetti TimeZoneInfo tengono conto delle impostazioni di ora legale e quindi penso che siano indicati nel tuo scenario. Supponiamo che l'utente dal menu a tendina scelga:
(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna (W. Europe Standard Time)

Tu ti memorizzi l'ID del TimeZoneInfo selezionato sul record dell'utente, nel database. Cioè:
W. Europe Standard Time


Quando gli devi mostrare i valori nel suo timezone, usi questo codice:
var utcDate1 = new DateTime(2019, 02, 01, 0, 0, 0, DateTimeKind.Utc); //Data UTC ottenuta dal DB
string timezone = "W. Europe Standard Time"; //Timezone ottenuto dal DB
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById(timezone);
DateTime localDate1 = TimeZoneInfo.ConvertTimeFromUtc(utcDate1, timeZone);
Console.WriteLine(localDate1);

Verrà stampato un orario che tiene conto del fuso orario invernale (+01:00) dato che la data è in inverno. Se usi un'ora estiva, vedrai che verrà usato il fuso orario estivo (+02:00) come vedi in questo fiddle.
https://dotnetfiddle.net/eilGaO

Se no
Hai provato semplicemente a impostare la Culture per la richiesta corrente come indicato qui?
https://www.aspitalia.com/script/1332/Gestire-Localizzazione-ASP.NET-Core.aspx

ciao,
Moreno
Modificato da BrightSoul il 26 settembre 2019 14:05 -

Enjoy learning and just keep making
234 messaggi dal 08 marzo 2012
Ciao!

...e grazie della risposta!

Settimana prossima proverò e ti faccio sapere!
234 messaggi dal 08 marzo 2012
Sembrerebbe funzionare!

Grazie!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.