我在NodaTime lib上遇到了一个问题。我的目标是:在两个日期之间计算年/月/日期。下面是我的测试示例:
private static void Main()
{
var list = new List<Tuple<DateTime, DateTime>>
{
new Tuple<DateTime, DateTime>(new DateTime(1980, 1, 1), new DateTime(1983, 12, 31)),
new Tuple<DateTime, DateTime>(new DateTime(2009, 1, 1), new DateTime(2015, 01, 23))
};
var totalPeriod = Period.Zero;
foreach (var tuple in list)
{
var dateFrom = tuple.Item1;
var dateTo = tuple.Item2;
var ld1 = new LocalDate(dateFrom.Year, dateFrom.Month, dateFrom.Day);
var ld2 = new LocalDate(dateTo.Year, dateTo.Month, dateTo.Day);
var period = Period.Between(ld1, ld2, PeriodUnits.YearMonthDay);
totalPeriod += period;
}
Console.WriteLine("Years: {0}, Months: {1}, Days: {2}",
totalPeriod.Years,
totalPeriod.Months,
totalPeriod.Days);
Console.Read();
}
输出是:年:9,月:11,天:52
对我来说是错误的。我想得到,例如,下一个输出(当然,输出取决于月份的天数,假设我们的月份有31天):年: 10,月: 0,天: 21
所以,我想把日子四舍五入到年和月。我怎么能得到这个?
答案:利用马特的答案,我创造了下一个解决方案:
foreach (var tuple in list)
{
var dateFrom = tuple.Item1;
var dateTo = tuple.Item2;
var period = Period.Between(LocalDateTime.FromDateTime(dateFrom).Date, LocalDateTime.FromDateTime(dateTo).Date, PeriodUnits.YearMonthDay);
totalPeriod += period;
}
// trying clarify the period
while(totalPeriod.Days >= 30)
{
totalPeriod = totalPeriod - Period.FromDays(30);
totalPeriod = totalPeriod + Period.FromMonths(1);
while (totalPeriod.Months >= 12)
{
totalPeriod = totalPeriod - Period.FromMonths(12);
totalPeriod = totalPeriod + Period.FromYears(1);
}
}
理查德在这篇文章中的评论是对的。问题是,月份和年份本身并不是不同的数量。一个人必须有一个参照系来“数一数”。当你做句点时,你就有了这个参考。在
操作之间,但当您尝试将句点添加到一起时,它将丢失。
如果您检查要添加的句点,这是有意义的:
First: Years: 3, Months: 11, Days: 30
Second: Years: 6, Months: 0, Days: 22
Total: Years: 9, Months: 11, Days: 52
为了按照你的意愿进行整数,在30天的基础上增加的22天必须知道引用的是哪个月。即使你保留了原始信息——你会使用哪一个?你很可能一边是28天的月份,另一边是31天的月份。
你能做的最好的事情就是事后自己人为地将结果四舍五入,并选择一个统一的值(比如30天)来代表所有的月份。
哦,一件小事(与您的问题无关)-要从DateTime
转换为LocalDate
,请尝试LocalDateTime。FromDateTime(dt)。日期
:)
鉴于下面的代码片段,为什么最后四个输出周期是相同的?我希望这些行的天数部分是4,3,2,1,而不是4,4,4,4。这是一个错误还是我遗漏了一些明显的东西?(天晚了,我很累,所以很可能是后者。)我用的是野田佳彦时间1.2.0。
问题内容: 我刚刚发现这可以工作: 但这不是: 而“。” 两者均可。 这里的句号和逗号有什么区别? 问题答案: 只允许一个表达式。但是允许使用一个表达式列表,其中每个表达式用逗号分隔。但是请注意,由于不是函数而是特殊的语言构造,因此将表达式列表用括号括起来是非法的。
问题内容: 我正在尝试使用获取Swift中的当前日期。创建断点并停止应用程序时,我发现设备的系统时间相差3个小时。应用程序正在真实的iPhone上运行。如何解决这个问题? 我还确保在App Delegate中编写以下内容: 但这仍然行不通。 问题答案: 它不会返回错误的时间。它返回正确的时间。NSDate没有任何时区信息。现在,当我们调用NSDate()时,我的计算机和您的计算机将报告完全相同的时
问题内容: 好的,有没有一种方法可以从函数中返回值-该方法可以-但不能 停止 该函数-该方法可以呢? 我需要这个,所以我可以经常返回值。(由或其他方式提供的延迟。) 问题答案: 我想你在找。例:
我试图在pyplay中制作一个2D游戏,并有一个具有表面属性的相机类,每次相机更新时,其表面都会更新。所有图形都game.world表面,然后主相机拍摄一张照片,并将其显示在显示表面。然而,当使用其他相机时,我无法将其遮挡到世界表面并获得锁定错误。我已经尝试过了。解锁()。什么会导致这种情况?