我试图通过在C#中传递日期来查找月中的工作日数。
例如:如果我通过“2013年3月6日(2013年3月6日)”,该功能应该是月份的第1个星期三。 如果我通过“3/1/2013(2013年3月1日)”,该功能应该说是月份的第一个星期五。 如果我通过“2013年3月13日(2013年3月13日)”该功能应该说是月份的第二个星期三。
我试图使用这个功能,但它在一周中返回(即通过“2013年3月6日(2013年3月6日)”返回2):
public static int GetWeekOfMonth(DateTime date)
{
DateTime beginningOfMonth = new DateTime(date.Year, date.Month, 1);
while (date.Date.AddDays(1).DayOfWeek != CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek)
date = date.AddDays(1);
return (int)Math.Truncate((double)date.Subtract(beginningOfMonth).TotalDays / 7f) + 1;
}
请建议如何获取月中的工作日数。
答案 0 :(得分:1)
这是我快速拼凑的东西:
public static int GetWeekOfMonth(DateTime dateTime)
{
DayOfWeek dayOfWeek = dateTime.DayOfWeek;
DateTime dayStep = new DateTime(dateTime.Year, dateTime.Month, 1);
int returnValue = 0;
while (dayStep <= dateTime)
{
if (dayStep.DayOfWeek == dayOfWeek)
{
returnValue++;
}
dayStep = dayStep.AddDays(1);
}
return returnValue;
}
这是相同的方法,只返回一个字符串,如“1st”,“2nd”,“3rd”等,而不是简单的INT。序数代码基于此帖子中的samjudson代码:Is there an easy way to create ordinals in C#?
public static string GetWeekOfMonth(DateTime dateTime)
{
DayOfWeek dayOfWeek = dateTime.DayOfWeek;
DateTime dayStep = new DateTime(dateTime.Year, dateTime.Month, 1);
int returnValue = 0;
while (dayStep <= dateTime)
{
if (dayStep.DayOfWeek == dayOfWeek)
{
returnValue++;
}
dayStep = dayStep.AddDays(1);
}
switch (returnValue % 100)
{
case 11:
case 12:
case 13:
return returnValue.ToString() + "th";
}
switch (returnValue % 10)
{
case 1:
return returnValue.ToString() + "st";
case 2:
return returnValue.ToString() + "nd";
case 3:
return returnValue.ToString() + "rd";
default:
return returnValue.ToString() + "th";
}
}
最后,这将返回“月的第二个星期三”:
DateTime dt = DateTime.Parse("2013-03-13");
string dateString = string.Format("{0} {1} of month", GetWeekOfMonth(dt), dt.ToString("dddd"));
答案 1 :(得分:1)
public static int GetWeekOfMonth(DateTime date)
{
var weekDay = date.DayOfWeek;
var nth = date.Day / 7;
if (date.Day % 7 > 0)
{
nth++;
}
return nth;
}
修改强>
实际上不需要var weekDay...
。
答案 2 :(得分:1)
我认为这很简单。如果某月中的某一天为1
到7
,则结果为1
,如果月中的某一天为8
到14
,则为2
}, 等等。因此:
public static int GetWeekOfMonth(DateTime date)
{
return (date.Day + 6) / 7;
}
这是有效的,因为当操作数(被除数和除数)是整数时,定义除/
的方式,参见/
Operator (C# Reference)。