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!