gpt4 book ai didi

c# - 计算日、月、年

转载 作者:行者123 更新时间:2023-11-30 19:33:24 26 4
gpt4 key购买 nike

如何准确计算日、月、年?

意味着..

从 1990 年 1 月 2 日到 2009 年 5 月 9 日是..

xxx 天,xxx 月,xxx 年。

知道怎么做吗?

我尝试了 Timespan 和 Tick().. 都失败了..

最佳答案

我认为框架中没有内置任何东西来执行此操作。 TimeSpan 不会这样做,因为天数等取决于确切的起点和终点,而不仅仅是它们之间的持续时间。

这是一个简单的方法,但效率低下:

using System;

class Program
{
static void Main()
{
ShowDifference(new DateTime(1990, 1, 2),
new DateTime(2009, 5, 9));
}

static void ShowDifference(DateTime start,
DateTime end)
{
if (start > end)
{
throw new ArgumentException();
}
// See comment at the end
int years = end.Year - start.Year - 2;
while (start.AddYears(years) <= end)
{
years++;
}
years--;
Console.WriteLine("{0} years", years);
start = start.AddYears(years);
int months = 0;
while (start.AddMonths(months) <= end)
{
months++;
}
months--;
Console.WriteLine("{0} months", months);
start = start.AddMonths(months);
int days = 0;
while (start.AddDays(days) <= end)
{
days++;
}
days--;
Console.WriteLine("{0} days", days);
}
}

显然,有一些方法可以提高效率,但它们会很繁琐。编辑:我已经改变了这一点,从对年数的一个非常保守的猜测开始——它可能比需要的要少一岁,但我现在不想考虑极端情况。它应该绝对有效,并且循环都有(相当小的)运行次数上限。

请注意,在每一步中,您都应该将完整的年/天/月数添加到起点,而不是一次添加一个月。否则,如果您从 1 月 30 日到 3 月 30 日,它将要求 2 个月和 2 天,因为当您添加一个月时从 1 月 30 日到 2 月 28 日的过渡,然后是 2 月 28 日到 3 月 28 日,当你添加第二个月。

希望Noda Time当我最终抽出时间完成它时,这一切都会变得更容易:)

关于c# - 计算日、月、年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3766817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com