时间戳定义为从格林威治时间 1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
protected static int m_timestamp;
/// <summary>
/// 获取时间戳Timestamp
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
private static int GetTimeStamp(DateTime dt)
{
DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
int timeStamp = Convert.ToInt32((dt - dateStart).TotalSeconds);
return timeStamp;
}
/// <summary>
/// 时间戳Timestamp转换成日期
/// </summary>
/// <param name="timeStamp"></param>
/// <returns></returns>
private static DateTime GetDateTime(int timeStamp)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = ((long)timeStamp * 10000000);
TimeSpan toNow = new TimeSpan(lTime);
DateTime targetDt = dtStart.Add(toNow);
return targetDt;
}
/// <summary>
/// 时间戳Timestamp转换成日期
/// </summary>
/// <param name="timeStamp"></param>
/// <returns></returns>
private static DateTime GetDateTime(string timeStamp)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(timeStamp + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
DateTime targetDt = dtStart.Add(toNow);
return dtStart.Add(toNow);
}
static void OnGUI()
{
DateTime dtNow = DateTime.Now;
m_timestamp = GetTimeStamp(dtNow);
Console.WriteLine
($"获取当前时间的时间戳 = {dtNow.ToString("yyyy-MM-dd hh:mm:ss")} -> {m_timestamp}");
DateTime dt = GetDateTime(m_timestamp);
Console.WriteLine($"将时间戳转换成日期_1 = {m_timestamp} -> { dt.ToString("yyyy-MM-dd hh:mm:ss")}");
DateTime dt1 = GetDateTime(m_timestamp.ToString());
Console.WriteLine($"将时间戳转换成日期_2 = {m_timestamp} -> {dt1.ToString("yyyy-MM-dd hh:mm:ss")}");
}
static void Main(string[] args)
{
OnGUI();
Console.ReadKey();
}
}
}