zcl_ccc 发表于 2017-4-14 08:32:00

在C#中获取如PHP函数time()一样的时间戳

  c#中没有象PHP一样的time()时间戳函数,但有DateTime.Now.Ticks用来计算时间差。

此属性的值为自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。
dotnet下用DateTime.Now.Ticks能够得到精确的时间,单位是10^-7s。
  经过实验,发现
view plaincopyprint?


[*]long a=(DateTime.Now.Ticks-aa.Ticks)/10000000-8*60*60;  
[*]tbxUrl.Text=a.ToString();  

  long a=(DateTime.Now.Ticks-aa.Ticks)/10000000-8*60*60;tbxUrl.Text=a.ToString();
  要减去8*60*60才和time()函数得到的值一样。
什么问题?刚好是8个时区产生的差别。
view plaincopyprint?


[*]DateTime aa=new DateTime(1970,1,1);  
[*]MessageBox.Show("1970  "+aa.Ticks.ToString()+"now"+DateTime.Now.Ticks.ToString());  
[*]long a=(DateTime.Now.Ticks-aa.Ticks)/10000000-8*60*60;  
[*]tbxUrl.Text=a.ToString();  

  DateTime aa=new DateTime(1970,1,1);MessageBox.Show("1970"+aa.Ticks.ToString()+"now"+DateTime.Now.Ticks.ToString());long a=(DateTime.Now.Ticks-aa.Ticks)/10000000-8*60*60;tbxUrl.Text=a.ToString();
  同时发现c#里面DataTime有一个属性!DateTime.UtcNow已经考虑了时区问题。
  ok~ 使用下面的代码即可
view plaincopyprint?


[*]DateTime timeStamp=new DateTime(1970,1,1);  //得到1970年的时间戳  
[*]long a=(DateTime.UtcNow.Ticks-timeStamp.Ticks)/10000000;  //注意这里有时区问题,用now就要减掉8个小时  

  DateTime timeStamp=new DateTime(1970,1,1);//得到1970年的时间戳long a=(DateTime.UtcNow.Ticks-timeStamp.Ticks)/10000000;//注意这里有时区问题,用now就要减掉8个小时
  UNIX时间戳 与 时间格式互相转换
view plaincopyprint?


[*]/// <summary>  
[*]/// 将Unix时间戳格式转换为c# DateTime时间格式  
[*]/// </summary>  
[*]/// <param name="timeStamp">时间戳</param>  
[*]/// <returns>DateTime </returns>  
[*]public 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);  
[*]}  

  /// <summary>/// 将Unix时间戳格式转换为c# DateTime时间格式/// </summary>/// <param name="timeStamp">时间戳</param>/// <returns>DateTime </returns>public 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);}
view plaincopyprint?


[*]/// <summary>  
[*]/// 将c# DateTime时间格式转换为Unix时间戳格式  
[*]/// </summary>  
[*]/// <param name="time">时间</param>  
[*]/// <returns>double</returns>  
[*]public int ConvertDateTimeInt(System.DateTime time)  
[*]{  
[*]     int intResult = 0;  
[*]     System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));  
[*]     intResult = (int)(time - startTime).TotalSeconds;  
[*]     return intResult;  
[*]}  
页: [1]
查看完整版本: 在C#中获取如PHP函数time()一样的时间戳