咨询区

  • 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

其实这个很好实现,我大概有两种解决方案。

  1. 自己实现将 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);
}
  1. 使用内置函数

如果你的项目是基于 .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 ?相关推荐

  1. SQL Server 2008 Datetime Cast 成 Date 类型可以使用索引(转载)

    很久没写blog,不是懒,实在是最近我这的访问速度不好,用firefox经常上传不了图片 ....... 今天无意发现了SQL Server 2008 Datetime Cast 成 Date 类型可 ...

  2. SQLServer中DateTime转换成Varchar

    最近一段时间,在修改两个数据库(使用sql server),要求相同表相同字段的类型要一致. 一,问题呈现 A,B两个数据库都有table1,table1中都有diaocrq字段(原来是datetim ...

  3. mysql datetime to varchar_SQL中DateTime转换成Varchar样式

    SQL中DateTime转换成Varchar样式 SQL中DateTime转换成Varchar样式 语句及查询结果: Select CONVERT(varchar(100), GETDATE(), 0 ...

  4. Datetime转换成年月日形式

    SELECT STUFF(STUFF(CONVERT(char(8),@dt,112),5,0,N'年'),8,0,N'月')+N'日'

  5. .net开发微信公众平台

    (转自:fhx900808.blog.163.com/blog/static/2099660212013423113226312/) 一.说明:公众平台信息接口为开发者提供了一种新的消息处理方式,只有 ...

  6. python中将HTTP头部中的GMT时间转换成datetime时间格式

    原文: https://blog.csdn.net/zoulonglong/article/details/80585716 需求背景:目前在做接口的自动化测试平台,由于接口用例执行后返回的结果中的时 ...

  7. python把日期数据转换成数字_python3时间datetime如何转换成数字?

    在计算的过程中,更加简便的运算往往是最受欢迎的.对于python3中的datetime来说,转换是为了让运算更加方便,同时电脑的内存也不会占用太多,说到这里很多小伙伴都会心动了,想要赶紧尝试下这种新的 ...

  8. UTC秒数转换成时间

        UTC(Universal Time Coordinated),即通用协调时间,与格林威治时间一样.每个地方的本地时间LT(Local Time)根据时区的划分与UTC时间相差若干小时,例如在 ...

  9. oracle date 转换 timestamp,Oracle timestamp类型转换成date类型

    今天需要根据时间判断,统一修改某一个字段的数据.然后打开数据库发现,时间类型为timestamp类型.如下: 然后呢,这对我不是喝口水就可以解决的问题吗? 解决方案如下:我需要改这张表某个字段的内容, ...

最新文章

  1. spring boot 启动不连接数据库
  2. 局部敏感哈希(Locality sensitive hash) [3]—— 代码篇
  3. C语言字符糊到了一起,C语言速成及格课.docx
  4. 消息中间体activeMQ
  5. ONENET平台简介及简单的接入方法
  6. sklearn中的train_test_split函数
  7. 【QT】QT从零入门教程(四):菜单栏、工具栏、状态栏
  8. php utf8 正则中文表达式
  9. Django REST framework+Vue 打造生鲜超市(九)
  10. JAVA105字符是什么_什么是Java字符串实习?
  11. CenterOS安装
  12. Centos7之安装谷歌浏览器
  13. QCC3040---earbud init module
  14. 关于类的符号输入过程第三篇
  15. 问题解决:ROS gazebo中加载模型后没有rostopic话题列表
  16. 机器人操作系统ROS(9)Gazebo物理仿真(摄像头仿真)
  17. 李某人的第一篇blog
  18. 小米捧红氮化镓快充?看完此文让你秒懂氮化镓!
  19. 人工智能概念类知识点总结
  20. 什么才是市场急需的前端工程师?【零基础web前端入门视频教程】

热门文章

  1. artDialog ( v 6.0.2 ) content 参数引入页面 html 内容
  2. 理解Linux系统中的load average
  3. Shell 脚本——测试命令
  4. 有关EnableQ在线问卷调查引擎的记者访谈记录
  5. JavaScript直接导出Excel,Word
  6. bzoj 1024 [ SCOI 2009 ] 生日快乐 —— 递归
  7. Timequest的波形窗口调出
  8. 多兼容的JS获取鼠标坐标
  9. java轻量级Http Server
  10. ASP.NET MVC CheckBoxFor为什么会生成hidden input控件