2015-05-09 5 views
6

że mam 2 klas z tego samego zestawu właściwości:konfiguracja AutoMapper używać czasu lokalnego dla wszystkich właściwości DateTime

public class MyDto 
{ 
    public int Id { get; set; } 
    public DateTime CreatedOn { get; set; } 
} 

public class MyViewModel 
{ 
    public int Id { get; set; } 
    public DateTime CreatedOn { get; set; } 
} 

Chcę mapa z AutoMapper, dostosowując data UTC klasy wejściowego czasu lokalnego klasy wyjściowego, np przyznane jestem w Wielkiej Brytanii, gdzie obecnie jest przesunięcie UTC 1h:

var input = new MyDto {Id = 1, CreatedOn = DateTime.Parse("01-01-2015 14:30")}; 
var output = Mapper.Map<MyViewModel>(input); // output.CreatedOn = "01-01-2015 15:30" 

mogę cofigure AutoMapper to automatycznie dla wszystkich DateTime właściwości?

N.B. aby ustawić czas używam DateTime.SpecifyKind(value, DateTimeKind.Utc)

Odpowiedz

3

Można utworzyć niestandardowy typ konwertera:

public class CustomDateTimeConverter : ITypeConverter<DateTime, DateTime> { 
    public DateTime Convert(ResolutionContext context) { 
     var inputDate = (DateTime) context.SourceValue; 
     var timeInUtc = DateTime.SpecifyKind(inputDate, DateTimeKind.Utc); 
     return TimeZoneInfo.ConvertTime(timeInUtc, TimeZoneInfo.Local); 
    } 
} 

To sprawi AutoMapper wykonać konwersję z UTC na czas lokalny dla każdego odwzorowania pomiędzy dwoma DateTime właściwości.