基于 WeihanLi.Npoi 實現excel導入時純漢字的日期轉換

基于 WeihanLi.Npoi 實現excel導入時純漢字的日期轉換

Intro

前段時間有位小伙伴在 Github 上提了一個 “不能識別純漢字的日期格式” issue

二〇二二年一月一日 格式的日期單元格識別不出來會變成,0001/1/1 0:00:00 如何讓它能夠識別出來呢,基于 InputFormatter 的強大擴展性支持,我們只需要實現一個從純漢字的日期轉換成標準日期的一個轉換即可,詳細參考后面的實現

Implement

首先去網上找了一個將支持將漢字日期轉換的方法,實現來自于 http://luoma.pro/Content/Detail/671?parentId=1,(代碼有點長,這里只是截出來一部分只是作為示例,有需要的小伙伴也可以自己寫一個

//?http://luoma.pro/Content/Detail/671?parentId=1
public?static?class?DateTimeUtils
{public?static?bool?TransStrToDateTime(string??str,?out?DateTime?dt){dt?=?default;if?(str.IsNullOrEmpty())return?false;//第一次轉換if?(DateTime.TryParse(str,?out?dt)){return?true;}//第二次轉換string[]?format?=?new?string[]{"yyyyMMdd","yyyyMdHHmmss","yyyyMMddHHmmss","yyyy-M-d","yyyy-MM-dd","yyyy-MM-dd?HH:mm:ss","yyyy/M/d","yyyy/MM/dd","yyyy/MM/dd?HH:mm:ss","yyyy.M.d","yyyy.MM.dd","yyyy.MM.dd?HH:mm:ss","yyyy年M月d日","yyyy年MM月dd日","yyyy年MM月dd日HH:mm:ss","yyyy年MM月dd日?HH時mm分ss秒"};if?(DateTime.TryParseExact(str,?format,?CultureInfo.InvariantCulture,?DateTimeStyles.None,?out?dt)){return?true;}//第三次轉換try{if?(Regex.IsMatch(str,?"^(零|〇|一|二|三|四|五|六|七|八|九|十){2,4}年((正|一|二|三|四|五|六|七|八|九|十|十一|十二)月((一|二|三|四|五|六|七|八|九|十){1,3}(日)?)?)?$")){var?match?=?Regex.Match(str,?@"^(.+)年(.+)月(.+)日$");if?(match.Success){int?year?=?GetYear(match.Groups[1].Value);int?month?=?GetMonth(match.Groups[2].Value);long?dayL?=?ParseCnToInt(match.Groups[3].Value);dt?=?new?DateTime(year,?month,?int.Parse(dayL.ToString()));return?true;}}}catch{return?false;}return?false;}
}

接下來來準備一個測試方法和 model:

private?sealed?class?ChineseDateFormatter
{public?sealed?class?ChineDateTestModel{public?DateTime?Date?{?get;?set;?}}public?static?DateTime?FormatInput(string??input){if?(DateTimeUtils.TransStrToDateTime(input,?out?var?dt)){return?dt;}throw?new?ArgumentException("Invalid?date?input");}
}

最終配置和導入實現代碼如下:

FluentSettings.For<ChineseDateFormatter.ChineDateTestModel>().Property(x?=>?x.Date).HasColumnInputFormatter(ChineseDateFormatter.FormatInput);var?excelPath?=?"<excelPath>";?
var?list?=?ExcelHelper.ToEntityList<ChineseDateFormatter.ChineDateTestModel>(excelPath);
var?item?=?list[0];
Guard.NotNull(item);
Assert.Equal(DateTime.Parse("2022-01-01"),?item.Date);

這里我們導入一個純漢字的日期來測試一下,excel 內容示例如下:

0e472c53a9902ae404216d1485f1dfb6.png

導入結果如下:

7822a607a9962d8ceb685ff284dce69b.png

可以看到我們導入的時間此時已經不再是默認值了,可以正常讀取出來了

More

其他類似的需求也可以通過這種方式來實現,InputFormatter 主要是針對導入的處理,OutputFormatter 主要針對導出的處理,更多示例可以參考介紹:https://weihanli.github.io/WeihanLi.Npoi/docs/articles/zh/InputOutputFormatter.html(也支持 CSV 的處理)

目前覺得這種純漢字的日期比較少,我們基本不會用到,也不建議使用,因為大部分庫應該都是不支持的e9ec1735bb8e5a34c605eb5980e4cc0e.png

所以目前建議自己實現一個 formatter

如果用到的朋友比較多的話,也可以考慮集成在 package 里這樣大家使用起來會更方便,歡迎需要的朋友進行反饋

References

  • https://github.com/WeihanLi/WeihanLi.Npoi/commit/f98f624dfc2b2adf56ccd34a7f8964dde53ec291

  • https://github.com/WeihanLi/WeihanLi.Npoi

  • https://www.nuget.org/packages/WeihanLi.Npoi/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284177.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284177.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284177.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

寒假學習筆記(3)

2018.2.9 類 class class 類名{}&#xff1b;類似與結構體&#xff1b;類的實質是一種數據類型&#xff0c;類似于int、char等基本類型&#xff0c;不同的是它是一種復雜的數據類型。因為它的本質是類型&#xff0c;而不是數據&#xff0c;所以不存在于內存中&#xff0c;不能被…

十個模型,總結產品經理溝通方法論

編輯導語&#xff1a;毫不夸張地說溝通占據了產品經理日常工作內容的40%&#xff0c;高效溝通往往能讓事情事半功倍。本文作者結合溝通方法與具體溝通情景講解了如何高效溝通&#xff0c;一起來看看吧&#xff01; 目錄 一、為什么要學會溝通 二、溝通模型 1. PREP原則&…

【Alpha】開發日志Day8-0719

最近幾天是攻堅階段&#xff0c;大家配合得越來越嫻熟了~ 以下是各位的每日小結&#xff1a; 姓名今日完成任務遇到的問題陳劼博寫了一個PPT播放界面&#xff0c;后來發現師兄其實已經完成了黃志華嘗試解決上傳問題,但是沒有成功&#xff1b;寫了一個修改表單的代碼,發現前端寫…

MySQL--字符集

1.字符集概述 簡單的說字符集就是一套文字符號及其編碼、比較規則的集合20世紀60年代初期&#xff0c;美國標準化組織ANSI發布了第一個計算機的字符集ASCII(American Standard Code for Information Interchange)&#xff0c;后來進一步變成了國際標準ISO-646。這個字符集采用7…

【Globalmapper中文入門到精通系列實驗圖文教程】(附配套實驗數據持續更新)

【Globalmapper中文版入門到精通系列實驗圖文教程】&#xff08;附配套實驗數據持續更新&#xff09; 文章目錄一、專欄簡介二、文章目錄三、數據目錄四、傳送門一、專欄簡介 本專欄為GlobalMapper中文入門實戰精品教程&#xff0c;內容主要涉及&#xff1a;Globalmapper23軟件…

【GlobalMapper精品教程】025:影像數據集的建立與巧妙使用

GlobalMapper影像數據集類似于金字塔,作用是提高大量影像的加載與顯示速度,還可批量進行一系列設置。本文的配套數據為data025.rar。 文章目錄 1. 建立影像數據集2. 影像數據集的使用1. 建立影像數據集 (1)點擊【文件】→【創建新地圖目錄】。 (2)選擇影像數據集存放路徑…

使用xUnit為.net core程序進行單元測試(3)

第1部分: http://www.cnblogs.com/cgzl/p/8283610.html 第2部分: http://www.cnblogs.com/cgzl/p/8287588.html 請使用這個項目作為練習的開始: https://pan.baidu.com/s/1ggcGkGb 測試的分組 打開Game.Tests里面的BossEnemyShould.cs, 為HaveCorrectPower方法添加一個Trait屬性…

war部署到tomcat

gs-rest-service-0.1.0.war復制到tomcat-9.0.0.M17\webapps\打開server.xml&#xff0c;這Host節點&#xff0c;加入<Context path"/gs" docBase"gs-rest-service-0.1.0.war" debug"0" privileged"true"/> gs相當于虛擬目錄&…

C# Thread IsBackground作用

背景之前在做一個定時下載任務的時候&#xff0c;使用的是一個主線程在執行任務&#xff1b;后面需求調整了&#xff0c;需要在啟用一個子線程執行優先級更高的單獨通道下載。于是下意識的這么做 new Thread//創建后臺線程Thread bThread new Thread(new ThreadStart(backgrou…

產品經理的分類及術語詳解

一、按項目分類 1、前端型PM 一句話概述&#xff1a;制造口碑帶來流量。 偏用戶體驗&運營&#xff0c;通過極致的產品設計&吸引眼球的產品營銷策略&#xff0c;打造口碑&#xff0c;創造一款用戶量巨大的產品。 【常見術語】 UCD&#xff08;User Centered Design…

Mybatis 攔截器

Mybatis定義了四種攔截器&#xff1a; Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)ParameterHandler (getParameterObject, setParameters)ResultSetHandler (handleResultSets, handleOutputParameters)StatementHandler …

1295 N皇后問題

1295 N皇后問題 時間限制: 2 s 空間限制: 128000 KB 題目等級 : 黃金 Gold 題目描述 Description在nn格的棋盤上放置彼此不受攻擊的n個皇后。按照國際象棋的規則&#xff0c;皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n后問題等價于再nn的棋盤上放置n個皇后&…

CDN的強大功能

2019獨角獸企業重金招聘Python工程師標準>>> CDN&#xff0c;內容分發網絡&#xff0c;除了用作網站加速外&#xff0c;還能夠更好的保護網站不被攻擊。防護網站不被攻擊的功能成就了CDN運行中的主要責任。CDN 防護原理是其主要在于在相關節點中成功的建立動態加速機…

IDEA創建SpringBoot項目無法連接https://start.spring.io(已解決)

錯誤&#xff1a; 方法&#xff1a; 將&#xff1a;https://start.spring.io 更換為 ?https://start.aliyun.com

論人生自動化

就像設備一樣基本都是由三部分組成&#xff0c;輸入&#xff0c;處理&#xff0c;輸出&#xff0c;三部分。當輸出與輸入兩者有比較&#xff0c;自然就產生了反饋&#xff0c;正反饋或者負反饋&#xff0c;有利于輸出的穩定性。有一些東西或者事情能達到閉環&#xff0c;則一切…

MySQL默認數據庫簡介

類似于MS SQL Server等大型數據庫&#xff0c;MySQL數據庫也提供了內置的數據庫&#xff0c;它們是&#xff1a;INFORMATION_SCHEMAmysqltest1.information_schema其中&#xff0c;第一個數據庫INFORMATION_SCHEMA提供了訪問數據庫元數據的方式。元數據是關于數據的數據&#x…

mysql常見監控項

1、MySQL服務運行狀態 約定所有MySQL服務都必須以ip1&#xff08;內網ip&#xff09;來綁定&#xff0c;每個機器只有一個ip1&#xff0c;可以有多個端口&#xff0c;即多個MySQL Server。采集程序讀取ip端口信息文件來判斷server是否存在。 sockParamps aux | grep -P "m…

2005年AMC8數學競賽中英文真題典型考題、考點分析和答案解析

今天距離2024年的AMC8美國數學競賽舉辦已不足一個月了&#xff0c;趕緊利用周末的時間刷刷真題&#xff0c;查漏補缺吧&#xff01;如果您有任何關于AMC8比賽的任何問題都可以問我&#xff0c;關于題目的解析也可以交流。 今天我們來看看2005年AMC8競賽的五道典型考題。歡迎您查…

WPF效果第一百九十三篇之登錄實現

前面一直在玩耍ListBox(最愛),大周末的就適合在家吹著風扇擼著代碼;今天來分享一個很簡單實用的登錄,來看看最終實現的效果:1、關于軟件啟動后焦點實現:<Style TargetType"Border"><Style.Triggers><DataTrigger Binding"{Binding IsEmptyAccoun…

IDEA中安裝并使用JRebel熱部署插件

文章目錄 作者簡介引言導航熱門專欄推薦概述安裝JRebel注冊JRebel配置JRebel最后小結導航熱門專欄推薦作者簡介 作者名&#xff1a;編程界明世隱 簡介&#xff1a;CSDN博客專家&#xff0c;從事軟件開發多年&#xff0c;精通Java、JavaScript&#xff0c;博主也是從零開始一步步…