c# 从滴答中重现日期时间

标签 c# .net datetime

我有一个像这样的日期时间字段

{01/01/0001 00:01:02} 

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

6203000000

刻度在数据库中保存为一个整数值,即 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。

谁能看出我做错了什么?

最佳答案

在我看来,您的“ticks 62030”实际上是“milliseconds 62030”,在这种情况下它非常简单 - 您只需要乘以“每毫秒的 ticks 数”,即 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 中适本地考虑它们。

关于c# 从滴答中重现日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17189149/

相关文章:

.net - .NET POS |区分(条形码)扫描仪和键盘输入

C#如何初始化WebService

c# - 如何在 ASP.NET Core 中添加 Mime 类型

c# - 编码字符 *

java - 将日期时间转换为字符串,时间错误

c# - 将字符串转换为有效的日期时间

java - JDBC 和 oracle 数据库时区处理

c# - 如何获取页面源并使用Watin进行搜索

c# - CollectionAssert.Contains(myList, myItem) != Assert.IsTrue(myList.Contains(myItem))

c# - 覆盖 WCF 服务中的 ToString 方法