我如何才能获得两次约会之间的月份集合

本文关键字:约会 两次 之间 集合 | 更新日期: 2023-09-27 18:14:09

下面是我的代码。我只知道两个日期之间的区别,但我想要介于开始日期和结束日期之间的那个月的名称。

public static int GetMonthsBetween(DateTime from, DateTime to)
{
    if (from > to) return GetMonthsBetween(to, from);
    var monthDiff = Math.Abs((to.Year * 12 + (to.Month - 1)) - (from.Year * 12 + (from.Month - 1)));
    if (from.AddMonths(monthDiff) > to || to.Day < from.Day)
    {
        return monthDiff - 1;
    }
    else
    {
        return monthDiff;
    }
}

我如何才能获得两次约会之间的月份集合

根据您的代码,您可以将月差从"to"DateTime中减去,以从您的输入中获得DateTime差。

public static List<DateTime> GetMonthsBetween(DateTime from, DateTime to)
{
    if (from > to) return GetMonthsBetween(to, from);
    var monthDiff = Math.Abs((to.Year * 12 + (to.Month - 1)) - (from.Year * 12 + (from.Month - 1)));
    if (from.AddMonths(monthDiff) > to || to.Day < from.Day)
    {
        monthDiff -= 1;
    }
    List<DateTime> results = new List<DateTime>();
    for (int i = monthDiff; i >= 1; i--)
    {
        results.Add(to.AddMonths(-i));
    }
    return results;
}

要获得月份名称,只需将DateTime格式化为"MMM"即可。

var dts = GetMonthsBetween(DateTime.Today, DateTime.Today.AddMonths(5));
foreach (var dateTime in dts)
{
    Console.WriteLine(dateTime.ToString("MMM"));
}

如果您想要两个日期之间的所有月份的名称,请使用以下内容:

var d1 = new DateTime(2015,6,1);
var d2 = new DateTime(2015,9,1);
var monthlist = new List<string>();
string format = d1.Year == d2.Year ? "MMMM" : "MMMM yyyy";
for (var d = d1; d <= d2; d = d.AddMonths(1))
{
    monthlist.Add(d.ToString(format));
}

完整列表现在位于monthlist中-您将希望从方法中返回

假设您使用的是Java和JodaTime,那么您的代码中有几个缺陷。

  1. 您不能使用from > to来评估一个日期是否在另一个日期之后。请改用from.isAfter(to)
  2. JodaTime已经提供了一种方法来计算两个给定日期Months.monthsBetween(start,end)之间的整个月的金额
  3. 根据计算出的月份差异,您可以实例化一个新的DateTime对象,该对象包含所需月份的日期,并通过yourNewDateTimeObject.month().getAsText()输出其名称

edit:刚刚发现你在用C#,所以忽略我上面的文字。下面我将尝试用C#回答您的问题。

  1. 你为什么不从to日期中减去from,然后得到你的差额呢?

  2. 由此产生的TimeSpan可用于确定两个给定日期之间的整个月的数量。

  3. 要获得所生成的月份名称,可以使用yourDateTime.ToString("MMMM");