检查c#中的月份是否在间隔中(asp.net)

时间:2014-11-05 13:00:00

标签: c# asp.net date

我正在开发一个用户可以下载各种报告的应用程序。每月有一份报告,每份报告都被称为" YYYY-MM.txt"。用户只能下载过去18个月的文件。

我编写了一个函数,它接受参数文件路径列表,然后将它们下载到客户端。我的问题是如何在此列表中添加文件,基本上我如何检查文件是否在过去18个月中,知道我有他的年份和月份,以及当前年份和月份。

这就是我所拥有的:

 //just for test, supposed that theses values were extracted from the report of august 2014.
        string fileYear = "2014";
        string fileMonth = "08";

        string currentYear = DateTime.Now.Year.ToString();
        string currentMonth = DateTime.Now.Month.ToString();

如何将fileYear和fileMonth与currentYear和currentMonth进行比较,以了解报告是否与过去18个月相对应。

提前感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我将如何做到这一点。

int fileYear = int.Parse(fileName.Substring(0,4));
int fileMonth = int.Parse(fileName.Substring(5,2));

DateTime oldestDate = DateTime.Now.AddMonths(-18);
int oldestYear = oldestDate.Year;
int oldestMonth = oldestDate.Month;

if(fileYear > oldestYear || (fileYear == oldestYear && fileMonth >= oldestMonth))
{
    // This file is within 18 months.
}

这意味着如果今天是2014年3月12日,它将包含文件回到2013-06.txt。如果需要,您还可以设置上限检查,以防您有未来日期的文件。

修改

另一种方法是从文件名创建DateTime进行比较。这是我如何做到这一点,以确保我比较文件的月份的最后一天

int fileYear = int.Parse(fileName.Substring(0,4));
int fileMonth = int.Parse(fileName.Substring(5,2));
DateTime fileDate = new DateTime(fileYear, fileMonth, 1).AddMonths(1).AddDays(-1);
DateTime oldestDate = DateTime.Now.AddMonths(-18);
if(fileDate.Date >= oldestDate.Date)
{
    // This file is within 18 months.
}

答案 1 :(得分:0)

你可以这样做:

https://dotnetfiddle.net/VORvZr

using System;

public class Program
{
    public static void Main()
    {
        DateTime fileDate = new DateTime(2013, 5, 1);
        DateTime fileDateNewer = new DateTime(2014, 1, 1);

        GetMonthDifference(fileDate);
        GetMonthDifference(fileDateNewer);
    }

    public static void GetMonthDifference(DateTime fileDate)
    {
        DateTime currentDate =  DateTime.Now;
        DateTime eighteenMonthsAgo = currentDate.AddMonths(-18);

        if (eighteenMonthsAgo > fileDate)
            Console.WriteLine("{0} is greater than or equal to 18 months ago", fileDate);
        else
            Console.WriteLine("{0} is less than 18 months ago", fileDate);
    }
}

请注意,如果可以,您始终希望尝试使用最能代表您数据的对象。例如。如果使用多年,您应该使用数字类型而不是字符串类型。在这种情况下,使用日期。

编辑:

正如在其他答案中发布的评论所指出的那样,如果文件上传/创建的话,那么您将有一些错误的余地,如果它正好在18个月左右。您可能做的事情是获取实际的文件创建日期(假设您是创建文件的系统,并且文件创建的日期与数据所属的月份一致。您可以获得文件创建日期:

string fullFilePathAndName = @""; // wherever your file is located
FileInfo fi = new FileInfo(fullFilePathAndName);
DateTime fileCreateDate = fi.CreationTime