• C#关于时间(获取特定格式的时间及多种方式获取当前时间戳)以及10位和13位时间戳转为特定格式


    C#关于时间(获取特定格式的时间及多种方式获取当前时间戳)以及10位和13位时间戳转为特定格式

     版权声明:本文为博主原创文章,未经博主允许不得转载,转载请注明出处。 https://blog.csdn.net/weixin_39885282/article/details/79462443

    一、获取当期时间并转为特定格式:

    string tradeTime = DateTime.Now.ToString("yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo);
    • 1

    这里写图片描述

    设置所需要的时间格式:

    string tradeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", DateTimeFormatInfo.InvariantInfo);
    • 1

    这里写图片描述

    string tradeTime = DateTime.Now.ToString("yyyy年MM月dd日 HH时mm分ss秒", DateTimeFormatInfo.InvariantInfo);
    
    • 1
    • 2

    这里写图片描述

    二、获取当前时间戳(取到毫秒得到的时间戳就是13位,只取到秒的话时间戳就是10位)

    第一种方法
    /// <summary>  
            /// 获取当前时间戳  
            /// </summary>  
            /// <param name="bflag">为真时获取10位时间戳,为假时获取13位时间戳.bool bflag = true</param>  
            /// <returns></returns>  
            public static string GetTimeStamp(bool bflag)
            {
                TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
                string ret = string.Empty;
                if (bflag)
                    ret = Convert.ToInt64(ts.TotalSeconds).ToString();
                else
                    ret = Convert.ToInt64(ts.TotalMilliseconds).ToString();
    
                return ret;
            }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    这里写图片描述

    一般一个项目中就会只用一种,要么10位要么13位,所以也可以直接用下面的代码

    public static long GetTimestamp()
            {
                TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1);//ToUniversalTime()转换为标准时区的时间,去掉的话直接就用北京时间
                return (long)ts.TotalMilliseconds; //精确到毫秒
                //return (long)ts.TotalSeconds;//获取10位
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    下面一种方式的唯一区别就在于是否需要获取异常,

    //生成unix格式时间
            public static long getUnix()
            {
                try
                {
                    TimeSpan timespan = DateTime.UtcNow - new DateTime(1970, 1, 1);
                    //return (long)timespan.TotalSeconds;//获取10位
                    return (long)timespan.TotalMilliseconds;
                }
                catch (Exception)
                {
                    return -1;
                }
            }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    前四种完整方法及运行结果

    public static long GetTimestamp()
            {
                TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1);//ToUniversalTime()转换为标准时区的时间,去掉的话直接就用北京时间
                return (long)ts.TotalMilliseconds; //精确到毫秒
                //return (long)ts.TotalSeconds;//获取10位
            }
    
            //生成unix格式时间
            public static long getUnix()
            {
                try
                {
                    TimeSpan timespan = DateTime.UtcNow - new DateTime(1970, 1, 1);
                    //return (long)timespan.TotalSeconds;//获取10位
                    return (long)timespan.TotalMilliseconds;
                }
                catch (Exception)
                {
                    return -1;
                }
            }
    
            public static long DateTimeToUnixTimestamp()
            {
                var start = new DateTime(1970, 1, 1, 0, 0, 0, DateTime.Now.Kind);
                return Convert.ToInt64((DateTime.Now - start).TotalSeconds);
            }
    
            public static long GetCurrentTimeUnix()
            {
                TimeSpan cha = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)));
                long t = (long)cha.TotalSeconds;
                return t;
            }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    运行结果: 
    这里写图片描述 
    看到结果会发现秒那块略有不同,大概是北京时间和标准时区的差别,有错误的地方请留言指正

    二、将10位和13位时间戳转为特定格式 
    为了测试这个转换是否正确,我先将当前时间转为Unix的10位和13位格式,然后再转回来: 
    获取当前时间戳就是上面的方法; 
    时间转换:

     private static string unixTimeToTime(string timeStamp)
            {
                DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
                long lTime;
                if (timeStamp.Length.Equals(10))//判断是10位
                {
                    lTime = long.Parse(timeStamp + "0000000");
                }else
                {
                    lTime = long.Parse(timeStamp + "0000");//13位
                }
                TimeSpan toNow = new TimeSpan(lTime);
                DateTime daTime = dtStart.Add(toNow);
                string time = daTime.ToString("yyyyMMddHHmmss");//转为了string格式
                return time;
    
            }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    运行结果: 
    这里写图片描述

    下面一个demo是将10位的直接转为DateTime 格式的:

    private static DateTime GetTime(string timeStamp)
            {
                DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
                long lTime = long.Parse(timeStamp + "0000000");
                TimeSpan toNow = new TimeSpan(lTime);
                return dtStart.Add(toNow);
            }

    •  
     
  • 相关阅读:
    WinForm微信扫码登录
    php字符串只替换一次
    laravel6 文档
    MYSQL批量修改
    semanage command not found
    SUID、SGID、SBIT
    passwd命令
    redhat配置yum软件仓库
    mount: no medium found on /dev/sr0 找不到介质
    CentOS7 防火墙(firewall)的操作命令
  • 原文地址:https://www.cnblogs.com/yelanggu/p/10938462.html
Copyright © 2020-2023  润新知