第一种方法
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
public class HomeController : Controller
{
public ActionResult Index()
{
//本地时间(北京时间)
DateTime dt = Convert.ToDateTime("2016-06-11 23:59:59");
//TimeZone类表示时区,TimeZone.CurrentTimeZone方法:获取当前计算机的时区。
TimeZone tz = TimeZone.CurrentTimeZone;
//获取当前计算机的时区与utc时间的时间差(北京时间和utc时间相差8个小时)
TimeSpan ts = tz.GetUtcOffset(dt);
//将当前计算机所在时区的时间(即:北京时间) 转换成UTC时间
DateTime dtGMT = tz.ToUniversalTime(dt);
//将UTC时间转换成本地时间
DateTime localtime = tz.ToLocalTime(dtGMT);
return View();
}
}
第二种方法
public class HomeController : Controller
{
public ActionResult Index()
{
//本地时间(北京时间)
DateTime dt = Convert.ToDateTime("2016-06-11 23:59:59");
//将北京时间转换成utc时间 (北京时间是utc时间+8小时,所以此时utc时间应该是 2016-06-11 15:59:59)
DateTime utcNow = dt.ToUniversalTime();
//将utc时间转换成秒 (即将1970-01-01 00:00:00 到 2016-06-11 15:59:59的时间转换成秒)
double utc = ConvertDateTimeInt(utcNow);
//将秒数转换成北京时间 (其实就是将utc时间转换成北京时间),所以又得到2016-06-11 23:59:59
DateTime dtime = ConvertIntDatetime(utc);
return View();
}
/// <summary>
/// 将时间转换成秒(这个秒是指1970-1-1 00:00:00 到你指定的时间之间的秒数)
/// </summary>
/// <param name="time">指定时间</param>
/// <returns>秒数</returns>
public double ConvertDateTimeInt(System.DateTime time)
{
double intResult = 0;
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
intResult = (time - startTime).TotalSeconds;
return intResult;
}
/// <summary>
/// 将秒数转换成北京时间
/// </summary>
/// <param name="utc">秒数</param>
/// <returns>北京时间</returns>
public DateTime ConvertIntDatetime(double utc)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
startTime = startTime.AddSeconds(utc);
startTime = startTime.AddHours(8);//转化为北京时间(北京时间=UTC时间+8小时 )
return startTime;
}
}