.Net5 Api konwersja czasu UTC <-> Local

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:

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ć?
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.

1

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

0

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

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.

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1