如何将 DateTime 转成 UnixTime ?
咨询区
Slider345:
我尝试将 C# 的 DateTime 转为 Unix 时间,但是 Unix 统计的是 1970.1.1
到现在的秒数,貌似 DateTime
统计的是 0001.1.1
到现在的 ticks 数。
我目前能想到的是从现在减去 1970.1.1
从而获取 totalSeconds ,比如下面代码:
TimeSpan span= DateTime.Now.Subtract(new DateTime(1970,1,1,0,0,0));
return span.TotalSeconds;
请问是否有更好的解决办法?
回答区
Dave Swersky:
其实这个很好实现,我大概有两种解决方案。
自己实现将 DateTime 转成 UnixTime。
public static DateTime ConvertFromUnixTimestamp(double timestamp)
{DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);return origin.AddSeconds(timestamp);
}public static double ConvertToUnixTimestamp(DateTime date)
{DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);TimeSpan diff = date.ToUniversalTime() - origin;return Math.Floor(diff.TotalSeconds);
}
使用内置函数
如果你的项目是基于 .NET Core 2.1
或者 .NET Standard 2.1
之上的话,DateTime 提供了一个 UnixEpoch 属性,它就表示 1970.1.1
。
public readonly struct DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable, ISerializable{//// Summary:// The value of this constant is equivalent to 00:00:00.0000000 UTC, January 1,// 1970, in the Gregorian calendar. System.DateTime.UnixEpoch defines the point// in time when Unix time is equal to 0.public static readonly DateTime UnixEpoch;}
codeMonkey:
如果你运行程序的电脑的时区没有问题的话,建议用 DateTimeOffset
替代 DateTime
, 这个类下有一个 ToUnixTimeSeconds()
方法,就是用来获取 1970-01-01T00:00:00Z
到现在的秒数,参考如下代码:
static void Main(string[] args){long unixSeconds = DateTimeOffset.Now.ToUnixTimeSeconds();Console.WriteLine(unixSeconds);}
顺便提一下,上面这种方式只适合 .NET Framework 4.6
以上的版本,如果你的项目版本太低的话,那还是需要手工指定一下,比如下面这样。
public static void Main(){TimeSpan span = DateTime.Now.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));Console.WriteLine(span.TotalSeconds);}
更多细节可参考MSDN:https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset.tounixtimeseconds?redirectedfrom=MSDN&view=net-5.0#System_DateTimeOffset_ToUnixTimeSeconds
点评区
记得当年和 PHP 开发的程序对接口时,就经常会遇到这种 UnixTime 的问题,没想到有这么多解法,学习了。
如何将 DateTime 转成 UnixTime ?相关推荐
- SQL Server 2008 Datetime Cast 成 Date 类型可以使用索引(转载)
很久没写blog,不是懒,实在是最近我这的访问速度不好,用firefox经常上传不了图片 ....... 今天无意发现了SQL Server 2008 Datetime Cast 成 Date 类型可 ...
- SQLServer中DateTime转换成Varchar
最近一段时间,在修改两个数据库(使用sql server),要求相同表相同字段的类型要一致. 一,问题呈现 A,B两个数据库都有table1,table1中都有diaocrq字段(原来是datetim ...
- mysql datetime to varchar_SQL中DateTime转换成Varchar样式
SQL中DateTime转换成Varchar样式 SQL中DateTime转换成Varchar样式 语句及查询结果: Select CONVERT(varchar(100), GETDATE(), 0 ...
- Datetime转换成年月日形式
SELECT STUFF(STUFF(CONVERT(char(8),@dt,112),5,0,N'年'),8,0,N'月')+N'日'
- .net开发微信公众平台
(转自:fhx900808.blog.163.com/blog/static/2099660212013423113226312/) 一.说明:公众平台信息接口为开发者提供了一种新的消息处理方式,只有 ...
- python中将HTTP头部中的GMT时间转换成datetime时间格式
原文: https://blog.csdn.net/zoulonglong/article/details/80585716 需求背景:目前在做接口的自动化测试平台,由于接口用例执行后返回的结果中的时 ...
- python把日期数据转换成数字_python3时间datetime如何转换成数字?
在计算的过程中,更加简便的运算往往是最受欢迎的.对于python3中的datetime来说,转换是为了让运算更加方便,同时电脑的内存也不会占用太多,说到这里很多小伙伴都会心动了,想要赶紧尝试下这种新的 ...
- UTC秒数转换成时间
UTC(Universal Time Coordinated),即通用协调时间,与格林威治时间一样.每个地方的本地时间LT(Local Time)根据时区的划分与UTC时间相差若干小时,例如在 ...
- oracle date 转换 timestamp,Oracle timestamp类型转换成date类型
今天需要根据时间判断,统一修改某一个字段的数据.然后打开数据库发现,时间类型为timestamp类型.如下: 然后呢,这对我不是喝口水就可以解决的问题吗? 解决方案如下:我需要改这张表某个字段的内容, ...
最新文章
- spring boot 启动不连接数据库
- 局部敏感哈希(Locality sensitive hash) [3]—— 代码篇
- C语言字符糊到了一起,C语言速成及格课.docx
- 消息中间体activeMQ
- ONENET平台简介及简单的接入方法
- sklearn中的train_test_split函数
- 【QT】QT从零入门教程(四):菜单栏、工具栏、状态栏
- php utf8 正则中文表达式
- Django REST framework+Vue 打造生鲜超市(九)
- JAVA105字符是什么_什么是Java字符串实习?
- CenterOS安装
- Centos7之安装谷歌浏览器
- QCC3040---earbud init module
- 关于类的符号输入过程第三篇
- 问题解决:ROS gazebo中加载模型后没有rostopic话题列表
- 机器人操作系统ROS(9)Gazebo物理仿真(摄像头仿真)
- 李某人的第一篇blog
- 小米捧红氮化镓快充?看完此文让你秒懂氮化镓!
- 人工智能概念类知识点总结
- 什么才是市场急需的前端工程师?【零基础web前端入门视频教程】
热门文章
- artDialog ( v 6.0.2 ) content 参数引入页面 html 内容
- 理解Linux系统中的load average
- Shell 脚本——测试命令
- 有关EnableQ在线问卷调查引擎的记者访谈记录
- JavaScript直接导出Excel,Word
- bzoj 1024 [ SCOI 2009 ] 生日快乐 —— 递归
- Timequest的波形窗口调出
- 多兼容的JS获取鼠标坐标
- java轻量级Http Server
- ASP.NET MVC CheckBoxFor为什么会生成hidden input控件