眼见为实:.NET类库中的DateTimeOffset用途何在
在 EnyimMemcachedCore(支持.NET Core的memached客戶端)中實(shí)現(xiàn)?Microsoft.Extensions.Caching.Distributed.IDistributedCache 接口時(shí),遇到了一個(gè)過(guò)期時(shí)間處理的問(wèn)題。
在?IDistributedCache 中用到了 DistributedCacheEntryOptions ,其中有一個(gè)屬性?AbsoluteExpiration 的類型是?DateTimeOffset 。而?EnyimMemcachedCore 計(jì)算過(guò)期時(shí)間用的是 DateTime,計(jì)算方法如下(示例代碼):
DateTime expiresAt = DateTime.Now.AddHours(1); DateTime unixEpoch = new DateTime(1970, 1, 1); var totalSeconds = (uint)(expiresAt.ToUniversalTime() - unixEpoch).TotalSeconds;上面的代碼中,totalSeconds 的運(yùn)行結(jié)果是?1474951193 。
那使用 DateTimeOffset 時(shí)該如何處理呢?
DateTimeOffset 表示的是時(shí)間偏移量,那它是基于哪個(gè)時(shí)間基準(zhǔn)的偏移呢?從?DateTimeOffset 的注釋中得知它是基于 UTC 時(shí)間(Coordinated Universal Time)。它和 DateTime 一樣也有 Now 屬性,于是有了下面的代碼:
DateTimeOffset expiresAtOffset = DateTimeOffset.Now.AddHours(1);那如何計(jì)算它相對(duì)于 1970-1-1 00:00:00 的總秒數(shù)呢?發(fā)現(xiàn) DateTimeOffset 有個(gè)方法叫?ToUnixTimeSeconds() ,從名稱看應(yīng)該就是它吧。第1次使用它,需要驗(yàn)證一下,眼見(jiàn)為實(shí):
totalSeconds = (uint)expiresAtOffset.ToUnixTimeSeconds();totalSeconds 的運(yùn)行結(jié)果也是是 1474951193 。
有了?DateTimeOffset ,計(jì)算過(guò)期時(shí)間更方便了,你也可以不用記住 Unix 時(shí)間戳的計(jì)算起始時(shí)間了。
總結(jié)
以上是生活随笔為你收集整理的眼见为实:.NET类库中的DateTimeOffset用途何在的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Servlet获得Http请求,GET/
- 下一篇: maven repository