天天看點

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

在批量導入Excel中的資料時發現出生日期為整數也就是為天數,結果倒騰了翻,這是其一,其二是資料庫中的某一列存的是JSON資料,但是場景是為了作為作業來運作,此時不得不将篩選出的資料手動拼接成JSON,給需要的童鞋鋪一點路。

在Excel中我們給出的出生日期則是正确的日期格式,比如如下:

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

但是呢,當我們導入資料時發現将其日期轉換成了天數,這其實也沒什麼問題,但是項目是在.NET Core中,則出現了一點問題,在.NET Framework中,如果我們擷取到的出生日期是double型數字即天數時,我們該如何将其轉換為對應的日期呢,請看如下:

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

此時我們通過 DateTime.FromOADate 方法能夠解析出日期,下面我們再來看看目前.NET Core版本為1.1中的情況:

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

此時你會發現如下在.NET Core 1.1中并未有此方法。

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

既然在Excel導入時為天數我們将日期添加天數不就行了嗎,在NET Core 1.1中隻能通過手動去轉換了。我們來看下:

此時得到的日期如下:

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

我們上述通過.NET Framework中的得到的日期為 1991-01-05 而此時得到的卻為 1992-03-06 ,轉換失敗。上述我們是通過目前日期去減去天數導緻轉換失敗,此時我們改變思路,從某個日期加上這個日期是不是就可以了呢。日期最小從 1899-12-31 開始,是以我們接下來進行下操作:

此時得到的結果如下:

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

上述示範得到的結果為 1991-09-29 ,而我們在Excel中的日期為 1991-09-28 後經過查閱資料發現,這個是Excel中的一個Bug,此時我們還需要進行如下操作才行。

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

在Excel中的日期多加了一天,類似如下:

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

想到這裡,從正向角度去看待,Excel中我們定義為日期型,而為何會進行轉換為天數了呢,我們看看Excel中格式設定。

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

原來是這樣,預設是正常,那麼我們是否可以設定自定義日期格式呢。

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

我們自定義格式為日期格式就不用再去讀取時進行轉換了,豈不爽哉,我們看看結果:

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

無論是從根本和利用代碼去轉換皆可解決問題,上述我們從Excel問題出發估計還保險一點。

利用代碼轉換為JSON簡直是SO EASY。但是上述也已經表明了場景,直接通過存儲過程篩選資料并将資料存儲為JSON字元串來進行短信通知,下面我們來看看,建立測試表。

插入測試資料:

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

接下來我們要将其先轉換為XML,通過FOR XML PATH,如下:

上述就無需我再多講,FOR XML PATH參數定義為XML根節點名稱

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

展開XML,則是如下XML資料

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

在SQL Server 2016有了對JSON解析的支援還是挺好,在SQL Server 2012中沒有隻能借用STUFF函數來拼接了。

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

此時我們發現多了 &#x0D 恰巧應該是換行導緻的,我們将其放在一行資料上即可。

此時則能正常輸出:

.NET Core 1.1日期解析無APi、SQL Server資料轉換JSON前言

.NET Core 1.1中尚未有将天數轉換成日期的APi,期待2.0能有更多的APi供我們使用。