我正在开发一个用户可以下载各种报告的应用程序。每月有一份报告,每份报告都被称为" 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个月相对应。
提前感谢您的帮助
答案 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