Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中对日期字段进行周末舍入(不使用LINQ)?_C#_.net_Datetime - Fatal编程技术网

如何在C#中对日期字段进行周末舍入(不使用LINQ)?

如何在C#中对日期字段进行周末舍入(不使用LINQ)?,c#,.net,datetime,C#,.net,Datetime,我有一个奇怪的日期取整问题,希望有人能解决。我的客户使用从周一到周日的工作周。星期天的日期被视为一周的结束日期,用于标识在特定一周内输入的所有记录(因此上周输入的任何内容的工作日值均为“10/26/2008”,即星期天的日期) 一个小小的转变是,用户输入前一周的记录,直到本周星期一上午11点 因此,我需要一个以DateTime.Now开头的函数,并根据上述规则返回一周结束日期(无时间部分)。谢谢你的帮助。我有一个有效的解决方案,但我太尴尬了,无法发布它 哦,我不能用LINQ public Dat

我有一个奇怪的日期取整问题,希望有人能解决。我的客户使用从周一到周日的工作周。星期天的日期被视为一周的结束日期,用于标识在特定一周内输入的所有记录(因此上周输入的任何内容的工作日值均为“10/26/2008”,即星期天的日期)

一个小小的转变是,用户输入前一周的记录,直到本周星期一上午11点

因此,我需要一个以DateTime.Now开头的函数,并根据上述规则返回一周结束日期(无时间部分)。谢谢你的帮助。我有一个有效的解决方案,但我太尴尬了,无法发布它

哦,我不能用LINQ

public DateTime WeekNum(DateTime now)
{
    DateTime NewNow = now.AddHours(-11).AddDays(6);

    return (NewNow.AddDays(- (int) NewNow.DayOfWeek).Date);
}

public void Code(params string[] args)
{

    Console.WriteLine(WeekNum(DateTime.Now));   
    Console.WriteLine(WeekNum(new DateTime(2008,10,27, 10, 00, 00)));
    Console.WriteLine(WeekNum(new DateTime(2008,10,27, 12, 00, 00)));
    Console.WriteLine(WeekNum(new DateTime(2008,10,28)));
    Console.WriteLine(WeekNum(new DateTime(2008,10,25)));


}

您可以硬编码DateTime.Now,而不是传递DateTime对象。这样做只会使测试更容易。

我也能接受:

[Test]
public void Test()
{
   DateTime sunday = DateTime.Parse("10/26/2008");
   DateTime nextSunday = DateTime.Parse("11/2/2008");

   Assert.AreEqual(sunday, GetSunday(DateTime.Parse("10/21/2008")));
   Assert.AreEqual(sunday, GetSunday(DateTime.Parse("10/22/2008")));
   Assert.AreEqual(sunday, GetSunday(DateTime.Parse("10/23/2008")));
   Assert.AreEqual(sunday, GetSunday(DateTime.Parse("10/24/2008")));
   Assert.AreEqual(sunday, GetSunday(DateTime.Parse("10/25/2008")));
   Assert.AreEqual(sunday, GetSunday(DateTime.Parse("10/26/2008")));
   Assert.AreEqual(sunday, GetSunday(DateTime.Parse("10/27/2008 10:59 AM")));
   Assert.AreEqual(nextSunday, GetSunday(DateTime.Parse("10/27/2008 11:00 AM")));
}

private DateTime GetSunday(DateTime date)
{
   if (date.DayOfWeek == DayOfWeek.Monday && date.Hour < 11)
      return date.Date.AddDays(-1);

   while (date.DayOfWeek != DayOfWeek.Sunday)
      date = date.AddDays(1);

   return date.Date;
}
[测试]
公开无效测试()
{
DateTime sunday=DateTime.Parse(“10/26/2008”);
DateTime nextSunday=DateTime.Parse(“11/2/2008”);
AreEqual(sunday,GetSunday(DateTime.Parse)(“10/21/2008”));
Assert.AreEqual(sunday,GetSunday(DateTime.Parse)(“10/22/2008”));
Assert.AreEqual(sunday,GetSunday(DateTime.Parse)(“10/23/2008”));
Assert.AreEqual(sunday,GetSunday(DateTime.Parse)(“10/24/2008”));
Assert.AreEqual(sunday,GetSunday(DateTime.Parse)(“10/25/2008”));
Assert.AreEqual(sunday,GetSunday(DateTime.Parse)(“10/26/2008”));
AreEqual(sunday,GetSunday(DateTime.Parse)(“10/27/2008 10:59 AM”);
AreEqual(下周日,GetSunday(DateTime.Parse)(“10/27/2008上午11:00”);
}
私人日期时间GetSunday(日期时间日期)
{
如果(date.DayOfWeek==DayOfWeek.Monday&&date.Hour<11)
返回日期.date.AddDays(-1);
while(date.DayOfWeek!=DayOfWeek.Sunday)
日期=日期。添加天数(1);
返回日期。日期;
}

我成功地使用了这些扩展:

如果你需要在周一上午11点之后开始新的一周,只需从现在减去11个小时,那么将该方法命名为其他方法可能是有意义的

DateTime GetRecordDate()
{
    DateTime nowMinusOffset = DateTime.Now.AddHours(-11);
    return nowMinusOffset.AddDays(7-(int)nowMinusOffset.DayOfWeek).Date;
}

星期天是星期天=0,星期一=1等等?@Joel:对不起,发得太快了。修订版应该行。谢谢,詹姆斯。我在返回行中添加了.Date,因此我只获取日期部分。关闭,但您将当前星期日转换为下一个星期日。
DateTime GetRecordDate()
{
    DateTime nowMinusOffset = DateTime.Now.AddHours(-11);
    return nowMinusOffset.AddDays(7-(int)nowMinusOffset.DayOfWeek).Date;
}