【发布时间】:2018-04-19 14:52:11
【问题描述】:
我正在尝试在 C# 中创建一个函数来返回两个日期之间的周差。它的目标是提供相同的结果:
select datediff(ww,'2018-04-13','2018-04-16') as diff
在上面的例子中,这些日期之间只有 3 天,但它们是在不同的周内,所以结果应该是 1。
我尝试使用.TotalDays,但它无法正常工作。我也试过.GetWeekOfYear,但是当日期的年份不同时它不会正确返回。我在 StackOverflow 和其他论坛上似乎有很多问题,到目前为止,没有一个问题符合我的情况。这是我正在尝试的功能:
public static int GetWeekDiff(DateTime dtStart, DateTime dtEnd) {
// Doesn't work
var val = ((dtEnd - dtStart).TotalDays / 7);
val = Math.Ceiling(val);
return Convert.ToInt32(val);
// Doesn't work well between years
DateTimeFormatInfo dinfo = DateTimeFormatInfo.CurrentInfo;
var x = dinfo.Calendar.GetWeekOfYear(dtStart, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday);
var y = dinfo.Calendar.GetWeekOfYear(dtEnd, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday);
return y - x;
}
在函数的第一部分,我尝试了this post 中描述的内容。它没有工作
你能帮帮我吗? 提前致谢。
【问题讨论】:
-
有什么问题,只需检查年份,如果它们不一样,则将年份的所有周加起来并添加到差异中
-
@Leustherin 部分重叠,但如果星期天到星期一(相隔 1 天),OP 希望返回 1 周,如果星期六到星期日在同一周返回 0 周。有点扭曲。
-
您可以计算每个日期的一周开始时间,然后得到 TotalDays 并除以 7 并四舍五入。您需要确定您认为一周的开始时间以及如果第二个日期在第一个日期之前您想要返回什么等。
-
能否提供更多测试用例和预期结果?
标签: c# datetime date-difference