Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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#_Date - Fatal编程技术网

C# 我怎样才能确定今天是否是一个月的第一个星期一?

C# 我怎样才能确定今天是否是一个月的第一个星期一?,c#,date,C#,Date,我如何检查今天是否是一个月的第一个星期一 下面的代码给出了一个月的最后一天,我应该如何修改它 DateTime today = DateTime.Today; DateTime endOfMonth = new DateTime( today.Year, today.Month, DateTime.DaysInMonth(today.Year, today.Month) ); bool isItFirstMonday=DateTime.Today.

我如何检查今天是否是一个月的第一个星期一

下面的代码给出了一个月的最后一天,我应该如何修改它

DateTime today = DateTime.Today;
DateTime endOfMonth = new DateTime(
       today.Year, 
       today.Month, 
       DateTime.DaysInMonth(today.Year, today.Month)
);
bool isItFirstMonday=DateTime.Today.DayOfWeek==DayOfWeek.Monday
&&DateTime.Today.Day怎么样:

DateTime today = DateTime.Today;
if (today.DayOfWeek == DayOfWeek.Monday && today.Day <= 7)
DateTime today=DateTime.today;
如果(today.DayOfWeek==DayOfWeek.Monday&&today.Day我不懂c#,但在任何语言中,它都是

if Today is monday, 
and Today's Date is 7 or less.

你可以做以下事情

DateTime dt = ...;
if (dt.DayOfWeek == DayOfWeek.Monday && dt.Day <= 7) {
  // First Monday of the month
}
DateTime dt=。。。;

如果(dt.DayOfWeek==DayOfWeek.Monday&&dt.Day一个相关的案例,正如Jon所说,稍微复杂一些。假设你知道年份和月份:

public static DateTime getFirstMondayOfMonthAndYear(int Month, int Year)
{
    DateTime dt;
    DateTime.TryParse(String.Format("{0}/{1}/1", Year, Month), out dt); 
    for (int i = 0; i < 7; i++)
        {
        if (dt.DayOfWeek == DayOfWeek.Monday)
        {
            return dt;
        }
        else
        {
            dt = dt.AddDays(1);
        }
        }
    // If get to here, punt
    return DateTime.Now;
}
publicstaticdatetime getFirstMondayOfMonthAndYear(int-Month,int-Year)
{
日期时间dt;
TryParse(String.Format(“{0}/{1}/1”,年,月),out dt);
对于(int i=0;i<7;i++)
{
如果(dt.DayOfWeek==DayOfWeek.Monday)
{
返回dt;
}
其他的
{
dt=dt.增加天数(1);
}
}
//如果你到了这里,就下注
返回日期时间。现在;
}

daysofweek
应该是
DayOfWeek
。但是+1IMO计算DateTime是个坏主意。今天两次。假设它在一个月的最后一天,也就是星期一,一直到午夜。条件的第一部分被计算并返回“true”(因为它是星期一).然后午夜来临,现在是下个月的第一个星期二…所以第二部分也会返回“真的”…尽管事实上既不是“旧的”一天也不是“新的”天是一个月的第一个星期一。@Jon Skeet:对不起,我打字很快,在一周的168个小时里忘了停一微秒,但你当然是对的!你的最后一段提出了这样一个问题:“如果在计算过程中天变了,你是否应该返回真的?”@glowcoder:我认为如果“旧的一天”中或者“新的一天”是第一个星期一。如果这两个星期一都不是一个月的第一个星期一,这是不合理的。当然,我同意第二个声明,毫无疑问。第一个声明花了一些时间仔细考虑。我仍在讨论这个问题,但我认为它是合理的(你可以提出理由,我们没有具体的理由将其排除在外。)@glowcoder:这么说吧-你怎么能比第一种方法做得更好呢?你已经有了一个有效的比赛条件。想象一下,当你评估条件时,这是一个月的第一个星期一,但当你根据这些信息采取行动时,它会跳到星期二……这有什么不同吗?我不认为有什么不同避免这种竞争的一种可行方法。这更有意义。你需要第二次验证,它本身容易受到完全相同的问题的影响,这迫使第三次验证,这是sus…等等…它强迫了问题,问题得到了回答。感谢你澄清它!使用
TryParse,而不提供格式提供程序(区域性),可能是危险的,在这里是不必要的。在不可能的情况下返回错误的值是一个坏主意;
抛出一个异常。如果您想通过运行七种可能性来解决它,您还可以说
返回可枚举的.Range(1,7)。选择(i=>new DateTime)(年,月,i)).First(d=>d.DayOfWeek==DayOfWeek.Monday);
public static DateTime getFirstMondayOfMonthAndYear(int Month, int Year)
{
    DateTime dt;
    DateTime.TryParse(String.Format("{0}/{1}/1", Year, Month), out dt); 
    for (int i = 0; i < 7; i++)
        {
        if (dt.DayOfWeek == DayOfWeek.Monday)
        {
            return dt;
        }
        else
        {
            dt = dt.AddDays(1);
        }
        }
    // If get to here, punt
    return DateTime.Now;
}