iht*_*wot 7 .net c# datetime timestamp
我知道当我在C#中使用DateTime.Now.Ticks时它会返回一个long值,但是我需要将它存储在一个int变量中,我对是否能保持这种精度感到困惑.截至目前我只是一个演员
int timeStampValue = (int)DateTime.Now.Ticks;
Run Code Online (Sandbox Code Playgroud)
这是一个项目约束,所以我知道有大量的精度损失.我想我只是想不出另一种方法来存储一个存储在int中的时间戳,然后我可以将其与其他时间戳进行比较.
如果可能的话,任何关于如何保持精度的建议或建议将非常感激.
每个人的答案都是说明性的.我实际上最终只设置了一个涉及计数器的过程,当使用一个项目时,它的计数器设置为'0',所有其他计数器增加1.然后,最高计数器是下一个要使用的项目.
Ant*_*ram 13
DateTime.Now 并不是那么准确.
http://blogs.msdn.com/ericlippert/archive/2010/04/08/precision-and-accuracy-of-datetime.aspx
话虽如此,如果您将值转换为较小的类型,默认情况下您可以在任何情况下丢失数据.
考虑这个输出:
int.MaxValue: 2147483647
DateTime.Now.Ticks: 634075598514933010
Run Code Online (Sandbox Code Playgroud)
如何将这个转换成int是一个现实的选择?
San*_*har 11
你需要所有最重要的部分吗?(例如哪一年)
你需要所有最不重要的位吗?(例如亚纳秒精度)
您需要多长时间来衡量一下?
如果只需要毫秒精度,为什么不丢失最低有效位
int timeStamp = (int)(DateTime.Now.Ticks >> 10) // lose smallest 10 bits
Run Code Online (Sandbox Code Playgroud)
OP希望存储最近使用过的项目的时间:如果这是单个用户的用户选择,您可能不希望任何短于一秒的东西!因为每秒有10 ^ 7个滴答,所以长值中有log(10 ^ 7)/ log(2)= 23个超额位!
那么你需要多少空间?那么,你的价值观应该指明年,月,日,时,分和秒; 一年大约有3200万秒=大约24位.如果您想存储过去10年的价值,请添加3位.因此很容易融入int32.我建议
int timeStamp = (int)(DateTime.Now.Ticks >>23) // retain bits 23 to 55
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9141 次 |
| 最近记录: |