c#从刻度中重现日期时间

时间:2013-06-19 10:42:28

标签: c# .net datetime

我有一个像

这样的日期时间字段
{01/01/0001 00:01:02} 

毫秒= 30,上述日期时间字段的刻度为

6203000000

ticks在数据库中保存为int值62030.我需要使用数据库中的值重现上述日期时间(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。

谁能看到我做错了什么?

2 个答案:

答案 0 :(得分:8)

在我看来,你的“ticks 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也是。

答案 1 :(得分:4)

为什么不使用接受表示刻度的DateTime的{​​{1}}构造函数,例如:

Int64