眼見為實:.NET類庫中的DateTimeOffset用途何在

來源:互聯網
上載者:User

標籤:

在 EnyimMemcachedCore(支援.NET Core的memached用戶端)中實現 Microsoft.Extensions.Caching.Distributed.IDistributedCache 介面時,遇到了一個到期時間處理的問題。

在 IDistributedCache 中用到了 DistributedCacheEntryOptions ,其中有一個屬性 AbsoluteExpiration 的類型是 DateTimeOffset 。而 EnyimMemcachedCore 計算到期時間用的是 DateTime,計算方法如下(範例程式碼):

DateTime expiresAt = DateTime.Now.AddHours(1);DateTime unixEpoch = new DateTime(1970, 1, 1);var totalSeconds = (uint)(expiresAt.ToUniversalTime() - unixEpoch).TotalSeconds;

上面的代碼中,totalSeconds 的運行結果是 1474951193 。

那使用 DateTimeOffset 時該如何處理呢?

DateTimeOffset 表示的是時間位移量,那它是基於哪個時間基準的位移呢?從 DateTimeOffset 的注釋中得知它是基於 UTC 時間(Coordinated Universal Time)。它和 DateTime 一樣也有 Now 屬性,於是有了下面的代碼:

DateTimeOffset expiresAtOffset = DateTimeOffset.Now.AddHours(1);

那如何計算它相對於 1970-1-1 00:00:00 的總秒數呢?發現 DateTimeOffset 有個方法叫 ToUnixTimeSeconds() ,從名稱看應該就是它吧。第1次使用它,需要驗證一下,眼見為實:

totalSeconds = (uint)expiresAtOffset.ToUnixTimeSeconds();

totalSeconds 的運行結果也是是 1474951193 。

有了 DateTimeOffset ,計算到期時間更方便了,你也可以不用記住 Unix 時間戳記的計算起始時間了。

眼見為實:.NET類庫中的DateTimeOffset用途何在

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.