2015-05-09 10 views
6

dire che ho 2 classi con lo stesso set di proprietà:configurazione automapper di utilizzare l'ora locale per tutte le proprietà 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; } 
} 

voglio mappare con AutoMapper, regolando la data UTC della classe di ingresso dell'ora locale della classe di potenza, ad esempio, concesso io sono nel Regno Unito, dove compensato UTC attualmente è 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" 

Posso cofigure automapper a questo automaticamente per tutti DateTime proprietà?

N.B. per regolare il tempo che uso DateTime.SpecifyKind(value, DateTimeKind.Utc)

risposta

3

È possibile creare un convertitore di tipo personalizzato:

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); 
    } 
} 

questo renderà automapper eseguire la conversione da UTC in ora locale per ogni mappatura tra due DateTime proprietà.

Problemi correlati