C#中如何正确比较文件创建时间与指定DateTime?
解决文件创建时间与指定DateTime的比较问题
嗨,作为C#新手完全不用不好意思,咱们一步步来修正你的问题~
首先你的代码里有个明显的小错误:CompareTo方法返回的是整数(0表示两个时间相等,-1表示前者小于后者,1表示前者大于后者),但if语句需要的是布尔值(true/false),所以直接把CompareTo的结果放进去会编译报错。
另外还有个容易踩坑的点:File.GetCreationTime返回的文件创建时间通常包含毫秒级精度,而你手动定义的comparedate只有秒级,这会导致明明时间“看起来”一样,但实际因为毫秒差异判断为不匹配。
下面给你几种靠谱的解决方法:
方法1:截断时间精度后直接比较(推荐)
先把文件创建时间截断到秒级,再和目标时间对比,这样就能忽略毫秒的影响:
using System; using System.IO; class Program { static void Main() { // 先检查文件是否存在,避免找不到文件抛出异常 if (!File.Exists("test.txt")) { Console.WriteLine("文件不存在"); return; } DateTime targetTime = new DateTime(2018, 6, 25, 10, 21, 23); DateTime fileCreationTime = File.GetCreationTime("test.txt"); // 把文件创建时间截断到秒,忽略毫秒及更小单位 DateTime truncatedCreationTime = new DateTime( fileCreationTime.Year, fileCreationTime.Month, fileCreationTime.Day, fileCreationTime.Hour, fileCreationTime.Minute, fileCreationTime.Second ); if (truncatedCreationTime == targetTime) { Console.WriteLine("match"); } else { Console.WriteLine("no match"); } } }
方法2:正确使用CompareTo方法
如果你想保留CompareTo的用法,只需要判断它的返回值是否为0即可:
// 同样先做文件存在检查和时间截断(可选但推荐) if (truncatedCreationTime.CompareTo(targetTime) == 0) { Console.WriteLine("match"); } else { Console.WriteLine("no match"); }
方法3:使用DateTime.Equals方法
和直接用==类似,但如果需要自定义比较规则(比如忽略时区)可以用重载版本,基础用法如下:
if (DateTime.Equals(truncatedCreationTime, targetTime)) { Console.WriteLine("match"); }
额外提醒
如果你的业务场景需要更严格的时间匹配(比如必须包含毫秒),那可以跳过截断步骤,直接对比原始的fileCreationTime和targetTime,但记得给targetTime也加上对应的毫秒值哦~
内容的提问来源于stack exchange,提问作者GracefulJoe
相关产品推荐
相关产品推荐

