.Net中的DataTime类型 和 time_t类型转换

今天碰到一个问题:数据库表中一个记录时间的FIELD是用time_t类型,也就是long类型存储的,需要转换为yyyy-MM-dd HH:mm:ss格式显示到界面上。

当初用time_t类型大概是为了提高存取效率,但现在却给我留了个麻烦。如果开发工具还用VC当然就简单了,有MFCCTime类,也可以用tm等结构做转换。但问题是现在要用c#,一个我还不大会用的家伙……

上网查了查,有个DateTime的时间类可用。值范围在0001-01-01 0:0:0 ~9999-12-31 23:59:59内(晕,人类能生存到公元9999年?)表示的也还是格林威治时间。类的构造方法中有一个刚好是用long类型做参数,我把2006-8-2 0:0:0time_t1154448000仍了进去。代码是这样的:

long lT = 1154448000;

DateTime date = new DateTime( lT );

date.ToLocalTime(); //从格林威治转换为本时区的时间

string strTime = dT.ToString(“yyyy-MM-dd HH:mm:ss”);

运行后一看 时间是0001-01-01 00:01:55,差了两千多年。想了想可能有两个问题:上time_t的起始时间 1970-1-1 0:0:0,这个基准时间大概得加进去;另外查了下MSDN DateTime是用 100 毫微秒为计量单位,而time_t的计量单位是秒,大概还要乘上 1后面多少0 才对。于是我改了下代码:

long lT = 1154448000;

lT *= 100000000

DateTime date = new DateTime(1970,1,1,0,0,0);

TimeSpan ts = new TimeSpan( lT );

date.AddTicks( ts );

date.ToLocalTime(); //从格林威治转换为本时区的时间

string strTime = dT.ToString(“yyyy-MM-dd HH:mm:ss”);

运行后发现时间 1970-1-1 0:0:0,也就是说new DateTime后面的语句都白写了,郁闷。又仔细看了看AddTicksToLocalTime方法,是有返回值的,好吧,返回值分别都赋值给Date。再运行,呵呵,时间总算正常了。一大堆代码就实现这么个微不足道的要求,感觉很不爽,不行,得再省省。我在调试模式下把DateTime1970,1,1,0,0,0)的longcopy出来,这就好办了。最终的实现代码是:

 

long lT = 1154448000;

lT = lT * 100000000 + 621355968000000000;

DateTime date = new DateTime(lT);

date = date.ToLocalTime();

string strTime = dT.ToString(“yyyy-MM-dd HH:mm:ss”);

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值