gpt4 book ai didi

c# - C#中两个日期之间的周差

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:33 25 4
gpt4 key购买 nike

我正在尝试在 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 中描述的内容.没用

你能帮帮我吗?提前致谢。

最佳答案

首先计算两个日期之间有多少天。将天数除以 7 得到整周。

现在,通过计算天数对 7 的模数得出任何剩余天数,来计算是否有额外的一周要计算。如果第一个日期加上剩余天数属于不同的一周,则在计数上额外增加一周。

void Main()
{

var first = new DateTime(2018, 04, 13);
var second = new DateTime(2018, 04, 16);

Console.WriteLine(weekDiff(first, second));
}

public int weekDiff(DateTime d1, DateTime d2, DayOfWeek startOfWeek = DayOfWeek.Monday)
{
var diff = d2.Subtract(d1);

var weeks = (int)diff.Days / 7;

// need to check if there's an extra week to count
var remainingDays = diff.Days % 7;
var cal = CultureInfo.InvariantCulture.Calendar;
var d1WeekNo = cal.GetWeekOfYear(d1, CalendarWeekRule.FirstFullWeek, startOfWeek);
var d1PlusRemainingWeekNo = cal.GetWeekOfYear(d1.AddDays(remainingDays), CalendarWeekRule.FirstFullWeek, startOfWeek);

if (d1WeekNo != d1PlusRemainingWeekNo)
weeks++;

return weeks;
}

关于c# - C#中两个日期之间的周差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49924085/

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