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

Гро*_*ный 6 .net c# 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; }
}
Run Code Online (Sandbox Code Playgroud)

我想使用AutoMapper进行映射,将输入类的UTC日期调整为输出类的本地时间,例如,授予我在UK,其中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"
Run Code Online (Sandbox Code Playgroud)

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

NB调整我使用的时间 DateTime.SpecifyKind(value, DateTimeKind.Utc)

Thi*_* Sá 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这将使 AutoMapper 对两个DateTime属性之间的每个映射执行从 UTC 到本地时间的转换。