You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:55:08