.net下时间与时间戳之间的转换

   DateTime.Ticks此属性的值表示 0001 年 1 月 1 日午夜 12:00:00 以来所经历的 100 毫微秒隔数 (0: 00:00 年 1 月 1 日 UTC 0001,以公历),后者表示DateTime.MinValue。 它不包括归因于闰秒的刻度的数。
/// <summary>
/// 获取1970-01-01至dateTime的毫秒数
/// </summary>
public long GetTimestamp(DateTime dateTime)
{
    DateTime dt = new DateTime(1970,1,1,0,0,0,0);
    return (dateTime.Ticks - dt.Ticks) / 10000;
}

/// <summary>
/// 根据时间戳timestamp(单位毫秒)计算日期
/// </summary>
public DateTime NewDate(long timestamp)
{
    DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    long tt = dt.Ticks + timestamp * 10000;
    return new DateTime(tt);
}
   调用:
    long lTime = long.Parse("1500521873371");
    DateTime vt=NewDate(lTime);
    MessageBox.Show(vt.ToString("yyyy-MM-dd HH:mm:ss"));
由于new DateTime(1970, 1, 1, 0, 0, 0, 0).Ticks的值是固定的值(621355968000000000)不用每次去计算,上面的方法可以如下改写:
public long GetTimestamp(DateTime dateTime)
{
    return (dateTime.Ticks - 621355968000000000) / 10000;
}

public DateTime NewDate(long timestamp)
{
    long tt = 621355968000000000 + timestamp * 10000;
    return new DateTime(tt);
}
   以上转换后的时间也会是UTC的时间,目前中国的时区是东八区,可以在NewDate得到的时间加上8个小时,就变成中国的时间,也可以通过TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0)).Ticks 即:621356256000000000。把方法上面方法中的621355968000000000 换成 621356256000000000 转换后的时间就是当前时区的时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值