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

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

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

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

设置所需要的时间格式:

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

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

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

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

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

第一种方法
///   
        /// 获取当前时间戳  
        ///   
        /// 为真时获取10位时间戳,为假时获取13位时间戳.bool bflag = true  
        ///   
        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;
        }

这里写图片描述

一般一个项目中就会只用一种,要么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位
        }

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

//生成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 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;
        }

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

二、将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;

        }

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

下面一个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);
        }

你可能感兴趣的:(C#,C#时间)