Niedawno popisałem troszkę o czasie UTC i dlaczego tylko taka reprezentacja czasu powinna znajdować drogę do bazy danych. A teraz... w jaki sposób przygotować datę do podróży w drugą stronę, czyli do użytkownika.
Z Automapperem jest to zadanie doprawdy banalne, wystarczy odpowiedni Type Converter:
1: public class UtcToLocalTimeConverter : TypeConverter<DateTime, DateTime>
2: {
3: protected override DateTime ConvertCore(DateTime source)
4: {
5: string targetTimeZoneName = Config.TargetTimeZone;
6:
7: TimeZoneInfo targetTimeZone = TimeZoneInfo.FindSystemTimeZoneById(targetTimeZoneName);
8:
9: return TimeZoneInfo.ConvertTimeFromUtc(source, targetTimeZone);
10: }
11: }
Teraz tylko rejestracja w konfiguracji...
1: Mapper.CreateMap<DateTime, DateTime>().ConvertUsing<UtcToLocalTimeConverter>();
i już, automagicznie wszystkie nasze DTO przesyłane do użytkownika będą miały odpowiednią dla niego datę. A system nadal posiada wszelkie zalety "systemu przechowującego datę w UTC", bez żadnego dodatkowego wysiłku z naszej strony!