Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无毫秒比较日期时间_C#_Datetime - Fatal编程技术网

C# 无毫秒比较日期时间

C# 无毫秒比较日期时间,c#,datetime,C#,Datetime,我需要比较两个单独列表中的日期。每个列表都由MyFile对象构成。这是我创建的一个类,用于获取有关文件的特定信息,如名称、dateModified、扩展名等。唯一的问题是,我的第二个列表中的许多MyFiles对象(从外部硬盘获取的对象)直到毫秒才具有日期时间戳(LastWriteTime)。我相信这就是我的比较不起作用的原因。例如,这里有一个例子说明了我的比较是如何失败的:“为什么c#认为日期不相等?” a和b是MyFile对象,MyFile类包含一个属性ticks,该属性等于file.Las

我需要比较两个单独列表中的日期。每个列表都由MyFile对象构成。这是我创建的一个类,用于获取有关文件的特定信息,如名称、dateModified、扩展名等。唯一的问题是,我的第二个列表中的许多MyFiles对象(从外部硬盘获取的对象)直到毫秒才具有日期时间戳(LastWriteTime)。我相信这就是我的比较不起作用的原因。例如,这里有一个例子说明了我的比较是如何失败的:“为什么c#认为日期不相等?”

a和b是MyFile对象,MyFile类包含一个属性ticks,该属性等于file.LastWriteTime.ticks。它们不在程序中使用,我只是出于调试目的将它们包括在内。因此,在调试了几次之后,我意识到最后7位数字代表一个文件的毫秒数。因此,MyFile中的my ticks属性现在包含11个有效数字,而不是18个(注18-11=7)。这样做的问题是,当我比较ticks时,当我尝试更新ticks属性(除以10000000,然后乘以10000000)时,会得到奇怪的结果。因为我的ticks属性是一个长整数,所以当我除法时,它将丢失最后7位数字。我得到的“错误”更少。但还有一些时候,我会得到这样的东西:

在这里,我们可以看到,日期是相同的,至少直到第二个。为什么c#认为它不是同一个日期?我必须创建自己的“Ticks”函数吗?我知道我将dateTime转换为字符串,然后对其进行比较,但我希望能够知道对象a.dateTime是否已修改
比对象b更新。dateModified

请尝试与特定精度进行比较:

DateTime a, b;
// fill a and b with the values you need
if (Math.Abs((a-b).TotalSeconds) < 1)
    Console.WriteLine("File doesn't need to be copied");
else
    Console.WriteLine("File needs to be copied");
DateTime a,b;
//用所需的值填充a和b
if(数学绝对值((a-b).总秒数)<1)
WriteLine(“文件不需要复制”);
其他的
Console.WriteLine(“需要复制文件”);

这两个日期是否实际具有不同的
毫秒值?这里有一个工作方法:通过viggit检查答案您需要截断<代码>总秒数
可以是
0.3
是,谢谢。我刚发帖就查了一下。另外,
TimeSpan
也可以是负数,因此我将
Math.Abs()
编辑您的答案为:---->if((a-b).TotalSeconds<1),因为TotalSeconds属性返回一个双精度,而我得到的结果是0.4512。。。。。我会接受你的回答好的,你需要自己决定你的准确度。如果误差幅度高达1秒,则将阈值设为1秒。我编辑了答案。请注意,TimeSpan上存在TotalSeconds。因此,上述方法可行,或者您可以使用TimeOfDay从DateTime获取时间跨度。