天天看點

win10 uwp unix timestamp 時間戳 轉 DateTime

有時候需要把網絡的 unix timestamp 轉為 C# 的 DateTime ,在 UWP 可以如何轉換?

轉換函數可以使用下面的代碼

如何從 DateTime 轉 unix timestamp ,請用下面代碼

如果就是這麼簡單代碼,我就不會寫部落格專門來說。

我遇到一個問題,我拿到的是 json ,裡面的時間是 unix timestamp ,我需要把 long 的時間轉換 DateTime ,但是我不喜歡在使用的時候再經過轉換,能夠在寫的時候,把所有的 unix timestamp 自動轉換為 DateTime?

用代碼來說,過程就是:

json 轉換得到對象

對象進行轉換,但是這時發現需要重新寫一個類,這個類和原來的類隻有類型不一樣,其他都一樣。看起來代碼不優雅。

看完了上面的問題,是不是想到,json有一個優雅方法可以做到,是的,他可以自己寫轉換器。

我找到一個簡單方法,可以從 Json 轉換過程,直接把 DateTime 和 unix timestamp 互相轉換,方法很簡單。

下面來講下如何解決。下面需要用到了 JsonConverter 的進階用法。首先需要使用 Nuget 下載下傳 json 的庫,當然搜 json 下載下傳第一個就好。

然後建立一個類,用于類型轉換,類型轉換的意思就是從輸入一個類型轉換為輸出的一個類型

可以看到,建立的類型必須重新三個函數

很容易知道,<code>WriteJson</code> 就是從一個存在的類轉換為 json ,遇到類型需要做什麼轉換。 <code>ReadJson</code> 從一個json轉換為類的時候,遇到json需要如何轉換。 <code>CanConvert</code>目前的輸入是否支援轉換。

當然這幾個函數是對于屬性的,是以讀取一個值就好了。

一開始需要把 unix timestamp 轉換為 DateTime ,是以就是從 json 的字元串轉屬性。

寫的代碼就是 <code>ReadJson</code> ,于是開始寫這個函數

這樣就是轉換的代碼,看起來很簡單。

讀取 一個值,把他轉 long ,然後使用上面的函數轉換 DateTime ,為什麼這裡使用的是 long.Parse ,因為保證輸入的json是對的,如果json不對,那麼直接告訴錯誤才是好的做法。

和讀函數反過來,需要把 屬性轉json的字元串,可以從參數看到,需要轉換的值是 value ,這裡使用強轉,因為知道了他的類型。writer 可以直接寫入 很多類型

看起來大概就寫好了,但是最後一個函數隻需要傳回 true 就好,暫時不需要做什麼。

開始寫一個例子進行測試。

測試之前,我先把上面的轉換類所有代碼寫出來

測試是寫一個類,把他進行轉換json,然後使用json轉類,看得到結果是否一樣。

轉換 得到json 為 <code>{"created_utc":1498037127}</code>

因為我使用的是 DateTime.Now ,是以如果大家使用這個類,得到的結果可能和我得到的不一樣。

可以看到從json轉換結果和建立的類的屬性一樣,是以這個方法可以拿來使用。

<a href="https://stackoverflow.com/questions/44643498/convert-unix-timestamp-to-normal-date-uwp/44650513#44650513">https://stackoverflow.com/questions/44643498/convert-unix-timestamp-to-normal-date-uwp/44650513#44650513</a>

win10 uwp unix timestamp 時間戳 轉 DateTime