设置首页收藏本站在线聊天
授权版本:2024_09
开启左侧

[C#] C#Environment.TickCount49天变负数

[复制链接]
小红居 发表于 2023-9-27 16:17:28 | 显示全部楼层 |阅读模式
  1. Environment.TickCount - (long)vLastInputInfo.dwTime;
复制代码

强强强强.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2023-9-27 16:24:04 | 显示全部楼层
老老实实用DateTime类,要比较时间用TimeSpan,折腾一个简单的逻辑这么久,上次给你说的记录时间戳你又不去学习。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 小红居 发表于 2023-9-27 16:26:59 | 显示全部楼层
Criss 发表于 2023-9-27 16:24
老老实实用DateTime类,要比较时间用TimeSpan,折腾一个简单的逻辑这么久,上次给你说的记录时间戳你又不去 ...

有点转牛角尖了,就是看有没有办法能处理这种问题。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2023-9-27 16:46:17 | 显示全部楼层
  1. //获取时间戳
  2. private long GetTimeTicks()
  3. {
  4.     TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0);
  5.     return Convert.ToInt64(ts.TotalSeconds);
  6. }

  7. //转换时间戳到时间
  8. public DateTime TransDtFromStamp(long ts)
  9. {
  10.     DateTime dtStart = new DateTime(1970, 1, 1, 0, 0, 0);
  11.     TimeSpan dtStamp = TimeSpan.FromSeconds(ts);
  12.     return dtStart.Add(dtStamp);
  13. }
复制代码

有了上面两个函数计算时间差:
  1. //获取当前时间戳
  2. long ticksNow = GetTimeTicks();
  3. //时间戳 1695744000 => 2023-09-27 00:00:00
  4. long ticksTmp = 1695744000;
  5. long ticksLost = ticksNow - ticksTmp;
  6. //计算时间差
  7. TimeSpan ts = TimeSpan.FromSeconds(ticksLost);
复制代码
注意东八区区时是UTC+8.0,所以如果要得到中国当前时间,都是+8个小时的,计算的话保持一致就无需。

奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2023-9-27 16:51:21 | 显示全部楼层
小红居 发表于 2023-9-27 16:26
有点转牛角尖了,就是看有没有办法能处理这种问题。

上次分析的时候就说了,你的逻辑可能引入了带符号的数据,Int32是有符号类型,慎用这种取时间的,而且到了负数后你很难去判断你的时间,还会引入其他问题。
建议参考我上面那种方式,使用相对记录时间计算,当前时间是绝对不会小于之前记录时间的,而且这种方式利于转换其他程序(我们论坛内部也是记录的是时间戳)。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 小红居 发表于 2023-9-27 17:46:56 | 显示全部楼层
好的,谢谢。学到了
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 小红居 发表于 2023-9-27 17:48:42 | 显示全部楼层
Criss 发表于 2023-9-27 16:51
上次分析的时候就说了,你的逻辑可能引入了带符号的数据,Int32是有符号类型,慎用这种取时间的,而且到了 ...

好的,谢谢
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表