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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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
.net 获取上周一的日期_.net_Vb.net_Date_Days_Date Difference - Fatal编程技术网

.net 获取上周一的日期

.net 获取上周一的日期,.net,vb.net,date,days,date-difference,.net,Vb.net,Date,Days,Date Difference,我想知道本周星期一的日期。这接近正确吗 Dim MondayOfCurrentWeek As Date = Date.Today - Date.Today.DayOfWeek + 1 据我所知,AyOfWeek索引为: 1 = Monday 2 = Tuesday 3 = Wednesday 4 = Thursday 5 = Friday 6 = Saturday 0 = Sunday 因此,如果今天是星期四,我会得到: Dim MondayOfCurrentWeek As Date = D

我想知道本周星期一的日期。这接近正确吗

Dim MondayOfCurrentWeek As Date = Date.Today - Date.Today.DayOfWeek + 1
据我所知,AyOfWeek索引为:

1 = Monday
2 = Tuesday
3 = Wednesday
4 = Thursday
5 = Friday
6 = Saturday
0 = Sunday
因此,如果今天是星期四,我会得到:

Dim MondayOfCurrentWeek As Date = Date - 4 + 1 
这等于

Date - 3
对我来说似乎是对的


或者说我完全错了?

这是一种非常简单的替代方法,虽然性能可能不太好,但确实避免了任何基于算术的错误:

Dim monday As Date = Date.Today
While (monday.DayOfWeek <> DayOfWeek.Monday)
    monday = monday.AddDays(-1)
End While
Dim monday As Date=Date.Today
而(星期一。星期五。星期一)
星期一=星期一。添加天数(-1)
结束时

这可以很容易地扩展为一个函数来处理一周中的任何一天。除非这是一段非常大容量的代码,否则性能会很好。

这应该可以满足您的需要。它从提供的日期开始查找上一个星期一。没有循环,因此速度很快,不依赖枚举值进行算术调整,因此在枚举值发生变化时不会中断:

Public Shared Function PreviousMonday(ByVal dateValue As DateTime) As DateTime
    Dim dayOffset As Integer
    Select Case dateValue.DayOfWeek
        Case DayOfWeek.Sunday : dayOffset = 6
        Case DayOfWeek.Monday : dayOffset = 0
        Case DayOfWeek.Tuesday : dayOffset = 1
        Case DayOfWeek.Wednesday : dayOffset = 2
        Case DayOfWeek.Thursday : dayOffset = 3
        Case DayOfWeek.Friday : dayOffset = 4
        Case DayOfWeek.Saturday : dayOffset = 5
    End Select

    Return dateValue.AddDays(-1 * dayOffset)
End Function

如果您正在寻找前一周的周一到周日范围,那么您可以使用这些函数(Matt Wilko答案的修改版本)获得它们


它是C#,但有一个,它有一个很好的功能,你可以在一周中的任何一天使用。另一方面,虽然枚举不应该在未来的版本中更改,但它们总是有可能更改。我对基于枚举值执行算术非常谨慎。他究竟为什么要使用枚举?一周中的几天是内置在.NET框架中的。@Hypenate.FWIW-星期天不是0吗?@Matt确实如此。但是OP是在周一之后,而不是开始日。实际上他是在本周的周一之后,而不是前一周Monday@Matt啊,是的-我知道你得到了什么atI没有详细说明我的问题。我想得不够透彻。但是前一个星期一,这个答案正是我所需要的。一般来说,如果答案中包含了对代码意图的解释,以及在不介绍其他代码的情况下解决问题的原因,那么答案会更有帮助。
Public Shared Function PreviousMonday(ByVal dateValue As Date) As Date
Dim dayOffset As Integer
Select Case dateValue.DayOfWeek
    Case DayOfWeek.Sunday : dayOffset = -13
    Case DayOfWeek.Monday : dayOffset = -7
    Case DayOfWeek.Tuesday : dayOffset = -8
    Case DayOfWeek.Wednesday : dayOffset = -9
    Case DayOfWeek.Thursday : dayOffset = -10
    Case DayOfWeek.Friday : dayOffset = -11
    Case DayOfWeek.Saturday : dayOffset = -12
End Select

Return dateValue.AddDays(dayOffset)
End Function

Public Shared Function PreviousSunday(ByVal dateValue As Date) As Date
Dim dayOffset As Integer
Select Case dateValue.DayOfWeek
    Case DayOfWeek.Sunday : dayOffset = -7
    Case DayOfWeek.Monday : dayOffset = -1
    Case DayOfWeek.Tuesday : dayOffset = -2
    Case DayOfWeek.Wednesday : dayOffset = -3
    Case DayOfWeek.Thursday : dayOffset = -4
    Case DayOfWeek.Friday : dayOffset = -5
    Case DayOfWeek.Saturday : dayOffset = -6
End Select

Return dateValue.AddDays(dayOffset)
End Function
var now = DateTime.Now; //17.09.2020 19:15:49
int dayInWeek = (int)now.DayOfWeek; //4
var previousMonday = now.AddDays(-(((dayInWeek + 6) % 7) + 7)); //-10
var previousSunday= previousMonday.AddDays(6); //-4
        
Console.WriteLine(previousMonday); //07.09.2020 19:15:49
Console.WriteLine(previousSunday); //13.09.2020 19:15:49