我如何才能获得两次约会之间的月份集合
本文关键字:约会 两次 之间 集合 | 更新日期: 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,那么您的代码中有几个缺陷。
- 您不能使用
from > to
来评估一个日期是否在另一个日期之后。请改用from.isAfter(to)
- JodaTime已经提供了一种方法来计算两个给定日期
Months.monthsBetween(start,end)
之间的整个月的金额 - 根据计算出的月份差异,您可以实例化一个新的DateTime对象,该对象包含所需月份的日期,并通过
yourNewDateTimeObject.month().getAsText()
输出其名称
edit:刚刚发现你在用C#,所以忽略我上面的文字。下面我将尝试用C#回答您的问题。
-
你为什么不从
to
日期中减去from
,然后得到你的差额呢? -
由此产生的TimeSpan可用于确定两个给定日期之间的整个月的数量。
- 要获得所生成的月份名称,可以使用
yourDateTime.ToString("MMMM");