gpt4 book ai didi

c# - 使用 C# AutoMapper 将 DateTime UTC 转换为本地

转载 作者:太空宇宙 更新时间:2023-11-03 12:30:01 25 4
gpt4 key购买 nike

我将 ASP.NET 与 WebApi 的(Rest)和 AngularJS 一起使用。如果我将 DateTime 对象从客户端 (Angular) 发送到服务器 (C#),由于时区的原因,我会收到失真的(-2 小时)日期。所以我决定使用 Automapper。

我当前的代码如下所示:

AutoMapperConfiguration.cs:

public class AutoMapperConfiguration
{
public void Configure()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<DateTime, DateTime>().ConvertUsing<UtcToLocalConverter>();
});
}
}

UtcToLocalConverter.cs:

public class UtcToLocalConverter : AutoMapper.ITypeConverter<DateTime, DateTime>
{
public DateTime Convert(DateTime source, DateTime destination, ResolutionContext context)
{
var inputDate = source;
if (inputDate.Kind == DateTimeKind.Utc)
{
return inputDate.ToLocalTime();
}
return inputDate;
}
}

Global.asax.cs:

public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
new AutoMapperConfiguration().Configure();
//...some more stuff...
}
}

我想让我从客户端接收到的所有 DateTime 类型的对象自动转换,但是这段代码并没有发生这种情况。我做错了什么?有人可以帮我解决这个问题吗?

提前致谢。

最佳答案

我注意到从旧版本更新后 AutoMapper 发生了变化(我使用的是一个非常旧的版本)。即使使用 DateTimes 的 map 配置,从 AutoMapper 映射的对象最终也会在 Convert 方法之后将日期转换为 UTC 时间自定义转换器。查看发行说明可能会有所帮助。我还没有找到防止这种情况发生的选项。

此外,请检查您的配置设置是否正在使用。

创建配置对象后需要调用initialize吗?

AutoMapper.Mapper.Initialize(cfg);

所以...

public void Configure()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<DateTime, DateTime>().ConvertUsing<UtcToLocalConverter>();
});
AutoMapper.Mapper.Initialize(cfg);
}

关于c# - 使用 C# AutoMapper 将 DateTime UTC 转换为本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43113253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com