我有一个日期时间字段,例如
{01/01/0001 00:01:02}
毫秒= 30,并且上述日期时间字段的刻度是
6203000000
刻度线以62030的int值形式保存在数据库中。我需要使用数据库中的值来重现上述日期时间(62030)。因此,我尝试了以下方法。
var data = 62030;
winTime = new DateTime().AddTicks(Convert.ToInt64(data.ToString().PadRight(10, '0')));
var b = winTime.Ticks;
var b =6203000000。但是它返回的分钟数是10而不是01,第二个是20而不是02,而毫秒是300而不是030。
有人可以看到我在做什么吗?
最佳答案
在我看来,您的“滴答62030”实际上是“毫秒62030”,在这种情况下,它非常简单-您只需要乘以“每毫秒滴答数”即10,000。您完全不需要为此使用DateTime
:
// Note that if you want any significant length of time, you'd expect to get
// the data as a long, not an int
int data = 62030; // Milliseconds
long ticks = data * 10000L;
...并且您当然不需要字符串转换。转换为字符串,填充,然后再次转换回去,这是执行乘法的非常曲折且容易出错的方式。
或者,如果您确实需要
DateTime
:int data = 62030; // Milliseconds
long dateTime = new DateTime(data * 10000L);
我强烈怀疑,任何早期的
DateTime
值实际上都应视为TimeSpan
-这实际上代表着什么?如果是这样,那就更容易了:TimeSpan ts = TimeSpan.FromMilliseconds(data);
日期和时间概念很容易混淆,最终会遇到一些非常细小的错误。我个人建议使用Noda Time项目,该项目比.NET更能将它们分开,但是即使您不使用该库,也值得一看list of concepts,因此您也可以在.NET中适本地考虑它们。