C#关于时间(获取特定格式的时间及多种⽅式获取当前时间戳)以及10位和13
位时间戳转为特定格式
⼀、获取当期时间并转为特定格式:
设置所需要的时间格式:
⼆、获取当前(取到毫秒得到的时间戳就是13位,只取到秒的话时间戳就是10位)string tradeTime = DateTime .Now.ToString ("yyyyMMddHHmmss", DateTimeFormatInfo .InvariantInfo );
1string tradeTime = DateTime .Now.ToString ("yyyy-MM-dd HH :mm :ss", DateTimeFormatInfo .InvariantInfo );
1string tradeTime = DateTime .Now.ToString ("yyyy 年MM ⽉dd ⽇ HH 时mm 分ss 秒", DateTimeFormatInfo .InvariantInfo );
1
2第⼀种⽅法/// <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
unix时间戳转换日期格式5
6
7
8
9
10
11
12
13
14
运⾏结果:
看到结果会发现秒那块略有不同,⼤概是北京时间和标准时区的差别,有错误的地⽅请留⾔指正⼆、将10位和13位时间戳转为特定格式
为了测试这个转换是否正确,我先将当前时间转为Unix的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 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
运⾏结果:
下⾯⼀个demo是将10位的直接转为 格式的: 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
17private 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); }1
2
3
4
5
6
7
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论