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;
}