.Net5 Api konwersja czasu UTC <-> Local

.Net5 Api konwersja czasu UTC <-> Local
BL
  • Rejestracja:ponad 4 lata
  • Ostatnio:około rok
  • Postów:68
0

Cześć,
w DB mam zapisane wszystkie daty w czasie UTC, korzystam z EF Core 5 i chciałbym po stronie backendu po pobraniu danych konwertować daty na czas lokalny zalogowanego usera, a przed zapisem konwertować na czas UTC.

Po wygenerowaniu modelu w DBContext mam:

Kopiuj
entity.Property(e => e.StartTime)
.HasColumnType("datetime")
.HasColumnName("START_TIME");

Także nie wygenerował żadnego specify kind, więc rozumiem że po pobraniu nie bedzie kind zdefiniowany, a data będzie dokładnie taka jak w DB?

I tu teraz moje pytania:

  1. Co powinienem dostać z frontendu, żebym był w stanie konwertować czas na czas lokalny zalogowanego usera? Ludzie mogą się logować z różnych części świata gdzie różnica między local a utc będzie różna, więc nie mogę brać pod uwagę strefy czasowej serwera.
  2. Czy w EF można jakoś to zautomatyzować żeby sam przeliczał czasy po pobraniu i przed zapisem dla kolumn typu datetime? czy będę musiał sam ręcznie zawsze to zapewniać?
UglyMan
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:2206
1
blane napisał(a):

:

  1. Co powinienem dostać z frontendu, żebym był w stanie konwertować czas na czas lokalny zalogowanego usera? Ludzie mogą się logować z różnych części świata gdzie różnica między local a utc będzie różna, więc nie mogę brać pod uwagę strefy czasowej serwera.

Lokalny czas użytkownika i strefę czasową albo przesuniecie strefy użytkownika względem UTC tak żebyś mógł znormalizować do utc.

BL
Rozumiem czyli jakiś TimeZoneOffset np. w godzinach, a odnośnie drugiej pytania ?
UglyMan
Taki jakiś offset. Co do drugiego to nie znam sie na EF, ale może to pomoże: https://plawgo.pl/2018/08/21/jak-automatycznie-zmieniac-czas-lokalny-na-utc-w-asp-net-mvc/
Miang
  • Rejestracja:około 7 lat
  • Ostatnio:około godziny
  • Postów:1677
1

@blane: ale to właśnie wygląda na zadanie dla frontu


dzisiaj programiści uwielbiają przepisywać kod z jednego języka do drugiego, tylko po to by z projektem nadal stać w miejscu ale na nowej technologii
BL
  • Rejestracja:ponad 4 lata
  • Ostatnio:około rok
  • Postów:68
0

Poprawnie jest aby front zawsze dbał o konwersję? a backend tylko i wyłącznie komunikuje się po UTC?

Zobacz pozostałe 11 komentarzy
BL
A co chcesz pokazywać użytkownikom czas UTC na stronie? I taki gość z Chille się zaloguje o 07:00 lokalnego czasu, a na stronie będzie widział 13:00?
Miang
tylko dlaczego miałby o tym wiedzieć serwer?
BL
Nie wiem dlatego pytam :)
Miang
a ja po to pytam żebyś się zorientował że może to robić front bo serwer nie potrzebuje do niczego tych informacji
BL
Ale mówisz że mam się zorientować bo nie masz pewności? czy ją masz i tak się to powinno odbywać :)?
bakunet
  • Rejestracja:około 8 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Polska
  • Postów:1609
0

Może to być rozwiązaniem na około, ale możesz też z kontekstu pobierać IP i przez jakieś darmowe API szukać dla niego godziny.

Zobacz pozostały 1 komentarz
bakunet
Zgadzam się, jest szansa na to, że użytkownik korzysta z VPN / PROXY
BL
No ale z frontendu jestem w stanie wyciągnąć offset i wysłać do bacnekdu to już wiem, tylko czy można jakimś automatem daty konwertować w dwie strony czy będę musiał ręcznie to przerabiać przed wysłaniem i zwróceniem.
UglyMan
A w tym całym Entity czy jak to sie tam nazwy na set i get nie można tego przekonwertować ?
BL
Nie widziałem takiej możliwośći, jedyne co znalazłem to extension ktory domyślnie po pobraniu ustawia Kind UTC, bo normalnie jest unknown, ale to nadal nie bedzie przeliczać nic
Miang
użyszkodnik może w ogóle mieć na swoim kompie ustawioną inną strefę
BO
  • Rejestracja:około 6 lat
  • Ostatnio:6 dni
  • Postów:214
0

Ad2. Może chodzi ci o ComputedColumn? Spokojnie da się takie coś zrobić w EFcore jest dużo przykładów po wpisaniu tego w google. Ale nie jestem pewny czy o to ci chodzi. W takiej sytuacji w jednej kolumnie wpisujesz sobie czas od użytkownika (tylko musiałbyś mieć go mieć do profilu przypisane a nie każdorazowo być pobierany) w innej czas UTC i sama ci się trzecia kolumna liczy.

edytowany 1x, ostatnio: Botek

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.