问题:Excel文档里有一些列是日期类型的数据,使用Mapper默认的转换,发现生成的实体,在有的系统环境下能正常转换,但是在有的系统环境下,转换的日期出现中文。

猜想是Excel文档里,日期列的单元格格式是日期,那么转换为字符串时,会生成区域性特定格式的字符串。如果单元格格式是文本,那么应该就没有转换的问题了。

没有找到相关的api可以简捷地设置日期的转换规则,知道的可以留言告诉我

.Net Core Excel导入导出神器Npoi.Mapper 找到了思路,自定义某一列的转换规则。

我大体上是按照这个思路来解决的,多个日期列就用循环来解决,加入泛型来针对不同的Excel文档,总体来说略显累赘

查看代码
 /// <summary>
/// 修复日期转换后存在中文的问题
/// 原因分析:Excel列的类型是DateTime,在不同的系统环境下,经过Mapper的转换,会生成区域性特定格式的字符串
/// 解决方案是对格式为DateTime的列指定自定义的转换规则
/// </summary>
/// <typeparam name="T">Excel文档映射的实体</typeparam>
/// <param name="fileStream">Excel文档的流</param>
/// <param name="dateCols">数据为日期的列名</param>
/// <returns></returns>
public List<T> analysisExcelWithDateCols<T>(Stream fileStream, string[] dateCols) where T : class
{
List<T> ModelList = new List<T>();
var mapper = new Mapper(fileStream);
List<RowInfo<T>> DataList = new List<RowInfo<T>>(); foreach (string dateCol in dateCols)
{
PropertyInfo propertyInfo = typeof(T).GetProperty(dateCol); mapper.Map<T>(dateCol, dateCol, (excelCol, entity) =>
{
if (excelCol.CurrentValue != null)
{
T obj = entity as T;
if (obj != null)
{
DateTime date;
if (excelCol.CurrentValue is string)
{
date = Convert.ToDateTime(excelCol.CurrentValue);
}
else
{
date = (DateTime)excelCol.CurrentValue;
} propertyInfo?.SetValue(obj, date.ToString("MM/dd/yyyy"));
}
} return true;
}, null);
} DataList = mapper.Take<T>().ToList(); if (DataList != null && DataList.Count > 0)
{
foreach (var item in DataList)
{
ModelList.Add(item.Value);
}
}
return ModelList;
}

Npoi.Mapper 日期转换的更多相关文章

  1. .Net Core Excel导入导出神器Npoi.Mapper

    前言 我们在日常开发中对Excel的操作可能会比较频繁,好多功能都会涉及到Excel的操作.在.Net Core中大家可能使用Npoi比较多,这款软件功能也十分强大,而且接近原始编程.但是直接使用Np ...

  2. springMvc的日期转换之二

    方式一:使用@InitBinder注解实现日期转换 前台页面: 后台打印: 方式二:处理多种日期格式类型之间的转换 采用方式:由于binder.registerCustomEditor(Date.cl ...

  3. Struts2中Date日期转换的问题

      今天跑程序的时候莫名其妙的出现了下面的一个异常: java.lang.NoSuchMethodException:com.ca.agent.model.mybatis.ApprovalInforC ...

  4. Js 日期转换函数(UTC时间转换及日期想加减)

    IOS上Js日期转换中new Date("yyyy-mm-dd")不能正常工作,必须使用new Date("yyyy/MM/dd"); 日期相加减: Date. ...

  5. json日期转换

    //调用 ChangeDateFormat(CreatTime) //json日期转换 function ChangeDateFormat(jsondate) { jsondate = jsondat ...

  6. MySql和Oracle的日期转换到底有哪些不同?我们来比较一下

    1.MySql和Oracle的日期转换 mysql中有2种日期格式DATE和TIME,oracle只有一种日期格式DATE. oracle> select to_char(sysdate,'yy ...

  7. AngularJS 日期转换字符串

    日期转换成字符串的办法有很多种,其中最简单的方法是 使用AngularJS的filter来实现. $filter('date')(date, 'yyyyMM'): $filter('date')(da ...

  8. 使用DateUtils和DateFormatUtils处理时间日期转换与SimpleDateFormat的区别

    在Apache Commons项目的Lang里面,有两个类:DateUtils和DateFormatUtils,专门用于处理时间日期转换.它们在 org.apache.commons.lang.tim ...

  9. excel转换日期格式,将yyyymmdd类型日期转换成yyyy-mm-dd等日期类型方法

    源数据日期格式:例如: 20160420 20160422 目标日期格式类型: 2016-4-20 2016-4-22 或 2016/04/20 2016/04/22 方法: 一.选中相应数据的单元格 ...

  10. 日期转换时Safari中返回Invalid Date

    问题: 进行日期转换时,Safari中会返回Invalid Date, 而IE 9, Firefox, Chrome and Opera显示正常,代码如下所示: var d = new Date(&q ...

随机推荐

  1. windows11 安装跳过互联网验证

    按住shift+F10   cmd 输入  OOBE\BYPASSNRO 电脑重启后 出现 跳过得按钮

  2. 4. Lighting 窗口

    Lighting 实现烘焙或者实时渲染都在这里设置,其他灯光或者反射探头的作用相当于允许 Lighting (窗口)烘焙或者实时渲染. 0bject: Lightmap Static: 把烘焙的对象设 ...

  3. 测开-面试题-OS、Linux、算法、其他

    1 OS 1.1 进程.线程.协程区别? 答: 1.进程是资源分配的单位:2.线程是CPU调度的单位:3.协程是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在 ...

  4. Code Review在TDSQL-C 的应用实践

    1.1 为什么重视Code Review? 结合下面这个例子,我们来谈谈为什么要重视code review.假设你作为新人刚入职,领导分配了一个需求,于是接下来做了下面这些事: 为了完成任务疯狂敲了三 ...

  5. charles证书安装-客户端证书

    1.iOS设置教程: 1)wifi中配置代理 2)浏览器中输入chls.pro/ssl,进行证书下载 3)证书下载成功后,设置--通用--描述文件–安装刚下载的证书 4)设置--通用--关于本机--证 ...

  6. Prowide Core:SWIFT [tm] MT(FIN)消息传递的Java框架 开源

    Prowide Core(以前称为WIFE)是用于管理SWIFT MT消息的开源Java框架. 库的主要功能是针对所有MT消息类型的全面Java模型,以及简单易懂的解析和构建API. 该项目自2006 ...

  7. vue 复制功能

    实现: let message = ` ${name} 电话:${item.phone} 部门:${item.department} 职务: ${item.post} 邮箱:${item.email} ...

  8. java原生的分页工具

    @NoArgsConstructor @Data //生成 空参构造 get.set. tostring. equals. hascode public class PageUtils<T> ...

  9. vue-cli 根据不同的环境打包

    根据项目需要,通过vue-cli中的npm run build 打包到不同的环境,例如测试环境,预发布环境,线上环境,根据process.env分别进行接口的调用 vue-cli 中build中bui ...

  10. vue封装组件

    父组件 <template> <view> <assembly @submitToParent="submitToParent"> <te ...