Gdzie ustawić wartość datetime UTC w aplikacji n-warstwowej: warstwa prezentacji, domena lub baza danych?

Wydaje się, że powinno to być oczywiste pytanie, ale miałem pewne problemy ze znalezieniem dobrej odpowiedzi. Buduję aplikację n-warstwową, która musi być zależna od czasu UTC. Wartości mogą być aktualizowane, a gdy są datownikami, są rejestrowane. Obejmuje to transakcje w bazie danych, w których aktualizacje lub wstawki będą miały wpływ na kolumny datetime.

Aby dać kontekst, używam SQL 2008 R2 + z DATETIMEOFFSET (2) dla większości moich kolumn datetime. Rozważam umieszczenie aktualizacji znaczników czasu w procedurach przechowywanych, aby nie musiały być przekazywane przez sieć. Pozwoli to zaoszczędzić przepustowość w miarę rozwoju systemu, co jest dobrą rzeczą ... i może być wykorzystane do sprawdzenia, czy dane zmieniają się (pierwsze wygrane) na udostępnionych danych. Wadą jest to, że pierwsza osoba, która zgłosi transakcję, może nie wygrać transakcji, jeśli czas reakcji na wystąpienie aplikacji będzie niższy.

Jaki jest idealny lub zalecany sposób obsługi danych czasu UTC w tym kontekście?

Ustaw w SPROC z SYSUTCDATETIME () LUB ...Ustaw go w aplikacji za pomocą DateTimeOffset.Now lub DateTime.UtcNow

Jeśli dwa powyżej, czy zaleca się odpalenie tego w Warstwie prezentacji i przekazanie jej przez usługę do warstwy domeny lub po prostu ustawienie, gdy trafi ona na domenę na zapleczu usługi?

Jak widać, istnieje wiele opcji i pochylam się ku bazie danych ... ale będę wdzięczny za każdą radę lub słowa ostrzeżenia, zanim będę dalej budować tę rzecz.

Uwaga dodatkowa: Śledzę również informacje geoprzestrzenne ... ale to nie jest twardy system czasu rzeczywistego. Czas rzeczywisty użytkownika jest więcej niż wystarczający.

UPDATE: Będę używał DateTimeOffset w aplikacji. Moje badania doprowadziły mnie do odkrycia, że ​​„można wiarygodnie porównać dowolne DateTimes holowania, najpierw wywołując ToUniversalTime na każdym z nich. Strategia ta kończy się niepowodzeniem, jeśli (i tylko wtedy) dokładnie jeden z nich ma DatTimeKind„ Nieokreślony ”. powód faworyzowania DateTimeOffset ”- C # 4.0 In a Nutshell, książki O'Riely.

questionAnswers(1)

yourAnswerToTheQuestion