Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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# 查找当前周中的特定日期_C# - Fatal编程技术网

C# 查找当前周中的特定日期

C# 查找当前周中的特定日期,c#,C#,我怎样才能得到本周星期四的日期?例如,本周的星期四是2010年7月8日查看此库: 从主页上的示例中: DateTime nextFriday = DateTime.Now.Next(DayOfWeek.Friday); 查找最近星期四的伪代码: for 0 to 3 as x if today + x days is Thursday return (today + x days) if today - x days is Thursday re

我怎样才能得到本周星期四的日期?例如,本周的星期四是2010年7月8日查看此库:

从主页上的示例中:

DateTime nextFriday = DateTime.Now.Next(DayOfWeek.Friday);
查找最近星期四的伪代码:

for 0 to 3 as x
    if today + x days is Thursday
        return (today + x days)
    if today - x days is Thursday
        return (today - x days)
本周星期四要查找的伪代码:

lookForward = true
lookBackward = true
FirstDayOfTheWeek = Sunday

for 0 to 6 as x
    if today + x days is FirstDayOfTheWeek
        lookForward = false
    if today - x days is FirstDayOfTheWeek
        lookBackward = false
    if lookForward and today + x days is Thursday
        return (today + x days)
    if lookBackward and today - x days is Thursday
        return (today - x days)
对不起,我不会说C:)

你可以用现有的.NET DateTime(alebit笨拙地)来做这件事。诀窍是使用
DayOfWeek
enum作为整数,因为它以升序数字顺序(0-6)表示Sun-Sat的天数

或者更简单地说:

var today = DateTime.Today;
var thursday = today.AddDays(-(int)today.DayOfWeek).AddDays(4);


你不需要循环来获得答案。@Steven-如果你有不同的算法,请随时发布答案。我会的,但其他人在这方面击败了我。作为记录,我脑海中的解决方案比成功的解决方案更复杂,但它是正确的。当我在简化它的时候,我对你的答案发表了评论,但在我准备发布之前,我发现我是多余的。OP正在寻找本周的星期四,而不是下一天。你和LBushkin都在几秒钟内记录了这个答案。然而,我给了他荣誉,因为他的例子更有效(今天只打了一个电话),他解释了。他的答案会在午夜后几毫秒内给出正确的结果,而我的答案不会。同样正确。事实上,我认为通过引用一个方法来使用当前时间戳不止一次是安全的,你应该考虑缓存它来确保你在边缘条件下是安全的。它也(稍微)快一些。好的,我做了一个200万次迭代的测试,我的算法时钟为300纳秒,你的算法(第二部分)时钟为200纳秒。@ChaosPandion:很有趣。通过两次运行每个测试用例并丢弃第一次运行的结果,确保在性能测试中考虑JIT时间。否则你可能会看到扭曲的结果…@LBushkin-Hmmm,我在测试中只放弃了一次运行。我不希望这两种算法都慢到任何人都会关心的程度。这并没有真正的区别。无论如何,如果没有更专业的测试,很难在纳秒级获得准确度…除非你的系统碰巧认为星期五是本周的开始,在这种情况下,本周的星期四将是7/15/2010。当然,系统不太可能认为周五是一周的开始,但周一是一周的开始并非不可能。你可能需要考虑这一点,因为星期日你会得到不同的结果。W博士:好点。问题应该定义一周从哪一天开始。通常是星期天,但也有可能是星期一。今天早些时候有人告诉我,在意大利,星期一被认为是一周的开始。希望它对其他人有用,用另一种语言寻找解决方案。
DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek).AddDays(4)  
DateTime someDay = DateTime.Today;
var daysTillThursday = (int)someDay.DayOfWeek - (int)DayOfWeek.Thursday;
var thursday = someDay.AddDays( daysTillThursday );
var today = DateTime.Today;
var thursday = today.AddDays(-(int)today.DayOfWeek).AddDays(4);
// This is fixed...
int thursday = 4;

int difference = thursday - (int)DateTime.Now.DayOfWeek;

DateTime thursdayThisWeek = DateTime.Now.Date.AddDays(difference);