眼见为实:.NET类库中的DateTimeOffset用途何在

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 时间戳的计算起始时间了。

时间: 2024-11-13 13:55:32

眼见为实:.NET类库中的DateTimeOffset用途何在的相关文章

java 线程 新类库中的构件 countDownLatch 使用

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlhbmdydWkxOTg4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > package org.rui.thread.newc; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.

java类库中的设计模式

原帖:http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns 提问:我正在学习GoF的<设计模式>,想了解些它们在实际中的应用的样例. 大家能给我举一些使用设计模式的好样例吗?尤其是在Java类库中. 获得赞同最高的回答: 你能够通过Wikipedia对设计模式有个总体上的理解.Wikipedia上也提高了GoF所涉及到的模式.我这里总结一下,而且尽可能指出在JavaSE与JavaEE的API中是怎样

将数据库模型放入到.Net Core的类库中

一.前提概要 今年某天突然无聊,就决定学习.net core,此时的版本已经是.net core 1.1了.之前一直是用.net framework做项目,一直对Html.EditFor()等Html Helper不爽,感觉灵活性太差,此次看了微软的docs文档后,感觉到了.net core的强大之处,特别是Tag Helper,便决定投身到此平台中,但在新项目中发现了一个问题:之前做项目都是将数据库模型放在单独类库中,但现在发现.net core 类库的配置不一样,总是有问题,于是开始用bin

在类库中使用MessageBox

错误: 机房收费系统(VB.Net版)过程中,在D层的SqlHelper类中有一个异常捕获处理,捕获了异常之后想使用MessageBox.Show()弹出异常描述,但在编译时出现了"未声明"MessageBox".它可能因其保护级别而不可访问."的错误: 查看帮助,MSDN给出的解释是:语句引用某个编程元素,但编译器无法找到具有该确切名称的元素. 判断: 编译器无法识别,但MessageBox在窗体应用程序中可以使用,而且MessageBox.Show()为.Net

从类库中调用log4net的方法简介

大家在开发程序的时候,都会也必须用上日志功能.当前常用的日志工具可能就是log4net了.在当前基于框架的开发模式下,log4net都是在类库中调用(在核心服务类中作为一个服务供解决方案里的所有项目调用).在这种情况下常见的log4net调用设置显然是无法实现日志功能.经过实验,在完成以下几个步骤后,可以实现上述的功能:1.建立一个类库,在引用中加载log4net.dll:2.在AssemblyInfo.cs文件最后添加[assembly: log4net.Config.XmlConfigura

.NET Core在类库中读取配置文件appsettings.json

在.NET Framework框架时代我们的应用配置内容一般都是写在Web.config或者App.config文件中,读取这两个配置文件只需要引用System.Configuration程序集,分别用 System.Configuration.ConfigurationManager.AppSettings["SystemName"];//读取appSettings配置 System.Configuration.ConfigurationManager.ConnectionStrin

在类库中引用WebService的注意事件

在VS中 添加引用服务之后 会在 类库中生成一个app.config的文件 把里面的配置节点 添加到web项目中的 web.config中 即可.不然会报 错误

java中的getResourceAsStream用途

其实这个东西我也不明白,在项目中遇到了,我隐隐的感觉这是在读取一个文件信息,后来查阅了网友的相关博客,大概的总结一些这个玩意是干啥的. 首先,我们要知道在java中都有哪些个getResourceAsStream,以及参数的含义 主要的作用都是读取指定的文件,并返回一个输入流对象 1.这是我在项目中见到的方式 Server.class.getResourceAsStream("jdbc.properties") //读取指定文件,返回一个输入流InputStream对象 参数说明:这里

你会在C#的类库中添加web service引用吗?

本文并不是什么高深的文章,只是VS2008应用中的一小部分,但小部分你不一定会,要不你试试: 本人对于分布式开发应用的并不多,这次正好有一个项目要应用web service,我的开发环境是vs2008,之所以没有选择现在热门的WCF,本人有如下原因: 1:负责开发Web Service的小组对于vs2008应用不多,更不能奢望令人垂涎的WCF.     2:项目开发时间有限,根本不许你去拿项目做实验.     3:项目改动不大,web service足够对付需求.       由于我们的项目是从