c# - 两个日期之间的年、月、日、小时

标签 c#

我需要找出两个日期之间的差异并显示结果 以年、月、日和小时的格式表示,例如 1 年 2 个月 6 天 4 小时。

我该怎么做。日期和时间非常简单。但是年月让我很难过。

我需要结果 100% 准确...我们不能假设每月 30 天或每年 356 天。 请帮助谢谢。

最佳答案

获得准确年数、月数和实际天数的最佳方法(因为 Timespan DaysTotalDays 是从两个日期之间)是分别使用 AddYearsAddMonthsAddDays 方法。

我将在此处创建一个名为 DateDiff 的类,它将计算两个日期之间的年数、月数和天数。但是,我只会给你计算年差的代码(和算法),因为如果你知道年,你也会知道如何计算月和日。当然,这样你自己也有事情要做 ;-)

代码如下:

DateDiff 类:

class DateDiff
 {
    public DateDiff(DateTime startDate, DateTime endDate)
    {
        GetYears(startDate, endDate); // Get the Number of Years Difference between two dates
        GetMonths(startDate.AddYears(YearsDiff), endDate); // Getting the Number of Months Difference but using the Years difference earlier
        GetDays(startDate.AddYears(YearsDiff).AddMonths(MonthsDiff), endDate); // Getting the Number of Days Difference but using Years and Months difference earlier
    }
    void GetYears(DateTime startDate, DateTime endDate)
    {
        int Years = 0;
        // Traverse until start date parameter is beyond the end date parameter
        while (endDate.CompareTo(startDate.AddYears(++Years))>=0) {}
        YearsDiff = --Years; // Deduct the extra 1 Year and save to YearsDiff property
    }
    void GetMonths(DateTime startDate, DateTime endDate)
    {
      // Provide your own code here
    }
    void GetDays(DateTime startDate, DateTime endDate)
    {
      // Provided your own code here
    }

    public int YearsDiff { get; set; }
    public int MonthsDiff { get; set; }
    public int DaysDiff { get; set; }
 }

您可以像这样从 Main 测试代码:

测试代码:

    DateTime date1 = new DateTime(2012, 3, 1, 8, 0, 0);
    DateTime date2 = new DateTime(2013, 11, 4, 8, 0, 0);
    DateDiff dateDifference = new DateDiff(date1, date2);

    Console.WriteLine("Years = {0}, Months = {1}, Days = {2}", dateDifference.DiffYears, dateDifference.DiffMonths, dateDifference.DiffDays);

关于c# - 两个日期之间的年、月、日、小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19750489/

相关文章:

C#:简单的TCP服务器问题

c# - 使用语句 Roslyn 脚本/代码排序和删除(未使用的)?

c# - 为什么我的局部变量可能为空,即使该方法返回非空?

c# - 使集合可用于两个流程

C# 解析 SqlDbType 转换

c# - 向 Microsoft "ILogger"LogDebug 消息添加额外的元数据?

c# - 如何从 ASP.NET core 导出 CSV 文件

c# - 当某些内容缓存在 c# asp.net 中时,它是缓存在服务器上还是客户端上?

c# - asp.net 按索引插入一个元素到数组列表中

c# - 从异步方法将字符串添加到 StringBuilder