C#本地时间转Unix时间

  1. 获取Unix时间最高效的方法
       /// <summary>
        /// 扩展方法, 本地时间转Unix时间; (如 本地时间 "2020-01-01 20:20:10" 转换unix后等于 1577881210)
        /// </summary>
        /// <param name="time">本地时间</param>
        /// <returns>基于秒的10位数</returns>
        public static long GetTimeStamp2(this DateTime time)
        {
            return time.ToUniversalTime().Ticks / 10000000 - 62135596800;
        }
  1. 另外一种容易理解 但是效率略低的写法

	/// <summary>
        /// 扩展方法, 本地时间转Unix时间; (如 本地时间 "2020-01-01 20:20:10" 转换unix后等于 1577881210)
        /// </summary>
        /// <param name="time">本地时间</param>
        /// <returns>基于秒的10位数</returns>
        public static long GetTimeStamp2(this DateTime time)
        {
            return (long)(time.ToUniversalTime() -
                    new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
        }
  1. 基于字符串转Unix时间
    string fmtDate ="yyyy-MM-dd";//也可以是别的格式,如 "ddd MMM d HH:mm:ss 'UTC'zz'00' yyyy"
    string strTimeToParse="1970-01-01";//待转换的时间,格式需要和fmtDate 一致
    CultureInfo cInfo = CultureInfo.CreateSpecificCulture("en-US");//unix
    DateTime.ParseExact(strTimeToParse, fmtDate, cInfo);//转成Unix时间 
    //string JSstring = DateTime.Now.ToString(fmtDate, cInfo);//将C#时间转换成JS时间字符串 

题外话:

例子 类型
DateTime.Now.Ticks long
stopwatch.Elapsedxxx(如TotalDays,TotalSeconds,TotalMilliseconds) long
TimeSpan.Totalxxxx(如TotalDays,TotalSeconds,TotalMilliseconds) double
stopwatch.Elapsed.Totalxxxx double

关于Tick ,一个 'Tick' 周期是 is 100 纳秒(ns,nsec,mnanosecond ).
1 毫秒(millisecond ) 等于 1000 微妙(microsecond) ,等于100 000纳秒;
2 据说Totalxxx的内部实现是基于Ticks;
tick并不基于 CPU的时钟周期,但是Tick的计数或根据CPU时钟发生变化( 2G MZ的CPU来说,大概20个CPU时钟周期,新增1个Tick )

posted @   啊哈徐  阅读(1120)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示