AutoMapper配置使用所有DateTime属性的本地时间

时间:2015-05-09 14:59:42

标签: c# .net automapper

假设我有2个具有相同属性集的类:

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"

我可以自动为所有DateTime属性自动配置AutoMapper吗?

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

的时间

1 个答案:

答案 0 :(得分: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为两个DateTime属性之间的每个映射执行从UTC到本地时间的转换。