2015-05-09 186 views
6

说我有2类具有相同的属性集:AutoMapper配置使用本地时间对所有的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; } 
} 

我想与AutoMapper图,调整输入类的UTC日期为本地时间输出的类别,例如,授予我在英国地方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" 

我可以自动cofigure AutoMapper这对所有DateTime属性?

N.B.调整我用DateTime.SpecifyKind(value, DateTimeKind.Utc)

回答

3

的时间你可以创建一个自定义类型转换:

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

这将使AutoMapper执行从UTC转换为本地时间为2和DateTime性能之间的每一个映射。

相关问题