我正在提取一份离开加入约会的客户名单。由于所有客户可能没有约会,基于this answer,我有以下Automapper配置:
Mapper.CreateMap<Event, EventDetailsViewModel>()
.ForMember(dest => dest.StartDateTime, opt => opt.MapFrom(
src => src.StartDateTime == DateTime.MinValue ? "" : DateTimeHelper.ConvertFromUtc(src.StartDateTime, src.TimeZoneId)
.ToString("MM/dd/yyyy hh:mm tt", System.Globalization.CultureInfo.InvariantCulture)))
.ForMember(dest => dest.EndDateTime, opt => opt.MapFrom(
src => src.StartDateTime == DateTime.MinValue ? "" : DateTimeHelper.ConvertFromUtc(src.EndDateTime, src.TimeZoneId)
.ToString("MM/dd/yyyy hh:mm tt", System.Globalization.CultureInfo.InvariantCulture)))
.IgnoreAllNonExisting();
DateTimeHelper很简单:
public static class DateTimeHelper
{
public static DateTime ConvertToUtc(DateTime thisDate, string timeZoneId)
{
return TimeZoneInfo.ConvertTimeToUtc(thisDate, TimeZoneInfo.FindSystemTimeZoneById(timeZoneId));
}
public static DateTime ConvertFromUtc(DateTime thisDate, string timeZoneId)
{
return TimeZoneInfo.ConvertTimeFromUtc(thisDate, TimeZoneInfo.FindSystemTimeZoneById(timeZoneId));
}
}
我确认StartDateTime是'1/1/0001 12:00:00 AM',但不知何故,对DateTime.MinValue的检查不起作用,它会转到DateTimeHelper,当然会抛出异常。
我错过了什么?
答案 0 :(得分:1)
如果有人感兴趣,我最终实施了一个解决方法:
public static DateTime ConvertFromUtc(DateTime thisDate, string timeZoneId)
{
if (!String.IsNullOrEmpty(timeZoneId)) // workaround
return TimeZoneInfo.ConvertTimeFromUtc(thisDate, TimeZoneInfo.FindSystemTimeZoneById(timeZoneId));
return thisDate;
}
不理想,但是我可以继续工作。
答案 1 :(得分:0)
根据上面的代码,您的目标属性:“StartDateTime”是一个字符串。
我只是将代码放入观察窗口,这就是你得到的:
您的比较
Name: "1/1/0001 12:00:00 AM" == DateTime.MinValue
Value: Operator '==' cannot be applied to operands of type 'string' and 'System.DateTime'
我的比较
Name: "1/1/0001 12:00:00 AM" == DateTime.MinValue.ToString()
Value: true
Type: bool