C# 使用DateTime将特定时间跨度的月份分组在一起 publicstaticstringtimeline2(这个HtmlHelper助手,stringmystring2) { StringBuilder myString3=新的StringBuilder(); 日期时间开始=新的日期时间(2010,1,1); DateTime end=新的DateTime(2011,12,12); myString3.追加(“”); myString3.追加(“”); 对于(日期时间日期=开始;日期
使用LINQ: MAY MTWTFSSMTWTFSSMTWTFSSMTWTFSSMTWTF 12345678 JUNE MTWTFSSMTWTFSSMTWTFSSMTWTFSSMTWTF 123456789 好的,下一个不带C# 使用DateTime将特定时间跨度的月份分组在一起 publicstaticstringtimeline2(这个HtmlHelper助手,stringmystring2) { StringBuilder myString3=新的StringBuilder(); 日期时间开始=新的日期时间(2010,1,1); DateTime end=新的DateTime(2011,12,12); myString3.追加(“”); myString3.追加(“”); 对于(日期时间日期=开始;日期,c#,datetime,loops,dayofweek,C#,Datetime,Loops,Dayofweek,使用LINQ: MAY MTWTFSSMTWTFSSMTWTFSSMTWTFSSMTWTF 12345678 JUNE MTWTFSSMTWTFSSMTWTFSSMTWTFSSMTWTF 123456789 好的,下一个不带LINQ的变体: DateTime startDate = new DateTime(2010, 1, 1); DateTime endDate = new DateTime(2010, 12, 31); int monthCount = (end
LINQ
的变体:
DateTime startDate = new DateTime(2010, 1, 1);
DateTime endDate = new DateTime(2010, 12, 31);
int monthCount =
(endDate.Month - startDate.Month + 1) +
(endDate.Year - startDate.Year) * 12;
Enumerable
.Range(0, monthCount)
.Select(x => new DateTime(startDate.Year, startDate.Month, 1).AddMonths(x))
.ToList()
.ForEach(d1 =>
{
string month = d1.ToString("MMMM");
// here should be your code
// to work with months
Enumerable
.Range(0, d1.AddMonths(1).AddDays(-1).Day)
.Select(x => d1.AddDays(x))
.ToList()
.ForEach(d2 =>
{
string dayOfWeek = d2.ToString("ddd");
string day = d2.Day.ToString();
// here should be your code
// to work with days
});
});
StringBuilder sb=新建StringBuilder();
DateTime startDate=新的日期时间(2010,1,1);
DateTime endDate=新的日期时间(2012,12,31);
国际月计数=
(endDate.Month-startDate.Month+1)+
(endDate.Year-startDate.Year)*12;
对于(int i=0;i”,月);
int daysInMonth=d1.AddMonths(1.AddDays(-1.Day);
StringBuilder daysOfWeekRow=新建StringBuilder();
StringBuilder daysRow=新建StringBuilder();
对于(int j=0;j
您可以根据需要更改输出格式。我仅提供了基本示例
主要的事情是迭代必要的日期(使用或不使用LINQ
由您选择,但您可以同意LINQ
的解决方案更优雅),并在必要的位置添加自定义格式(我在第一个示例中的注释位置)(此HtmlHelper帮助程序,字符串myString1)
{
StringBuilder string2=新的StringBuilder();
DateTime startDate=新的日期时间(2010,1,1);
DateTime endDate=新的日期时间(2011,12,12);
第二条附后(“”);
对于(DateTime date=startDate;date谢谢老兄,谢谢你,我需要做另一个循环才能获得超过一年的时间吗?@Calibre2010:不,这里不需要另一个循环。你唯一需要做的就是更改开始和/或结束日期变量。如果我在年份值中添加一个变量,它会出错,因为它看不到年份的增加,只是在年内月值中的增量?@Calibre2010:如果您想在两年内这样做,只需将示例的第二行更改为
DateTime endDate=new DateTime(2011,12,31);
。不需要任何其他内容。我在键入----年、月和日参数描述不可表示的日期时间后出现此错误。如果该年没有递增,则..DateTime d1=新的日期时间(startDate.Year,startDate.Month+I,1);
MAY
MTWTFSSMTWTFSSMTWTFSSMTWTFSSMTWTF
12345678
JUNE
MTWTFSSMTWTFSSMTWTFSSMTWTFSSMTWTF
123456789
DateTime startDate = new DateTime(2010, 1, 1);
DateTime endDate = new DateTime(2010, 12, 31);
int monthCount =
(endDate.Month - startDate.Month + 1) +
(endDate.Year - startDate.Year) * 12;
Enumerable
.Range(0, monthCount)
.Select(x => new DateTime(startDate.Year, startDate.Month, 1).AddMonths(x))
.ToList()
.ForEach(d1 =>
{
string month = d1.ToString("MMMM");
// here should be your code
// to work with months
Enumerable
.Range(0, d1.AddMonths(1).AddDays(-1).Day)
.Select(x => d1.AddDays(x))
.ToList()
.ForEach(d2 =>
{
string dayOfWeek = d2.ToString("ddd");
string day = d2.Day.ToString();
// here should be your code
// to work with days
});
});
StringBuilder sb = new StringBuilder();
DateTime startDate = new DateTime(2010, 1, 1);
DateTime endDate = new DateTime(2012, 12, 31);
int monthCount =
(endDate.Month - startDate.Month + 1) +
(endDate.Year - startDate.Year) * 12;
for (int i = 0; i < monthCount; i++)
{
DateTime d1 = new DateTime(startDate.Year, startDate.Month, 1).AddMonths(i);
string month = d1.ToString("MMMM");
sb.AppendFormat("<p>{0}</p>", month);
int daysInMonth = d1.AddMonths(1).AddDays(-1).Day;
StringBuilder daysOfWeekRow = new StringBuilder();
StringBuilder daysRow = new StringBuilder();
for (int j = 0; j < daysInMonth; j++)
{
DateTime d2 = d1.AddDays(j);
string dayOfWeek = d2.ToString("ddd");
string day = d2.Day.ToString();
daysOfWeekRow.AppendFormat("<td>{0}</td>", dayOfWeek);
daysRow.AppendFormat("<td>{0}</td>", day);
}
sb.AppendFormat(
"<table><tr>{0}</tr><tr>{1}</tr></table>",
daysOfWeekRow.ToString(),
daysRow.ToString()
);
}
string result = sb.ToString();
public static string TimeLine(this HtmlHelper helper, string myString1)
{
StringBuilder string2 = new StringBuilder();
DateTime startDate = new DateTime(2010, 1, 1);
DateTime endDate = new DateTime(2011, 12, 12);
string2.Append("<table>");
for (DateTime date = startDate; date <= endDate; date = date.AddMonths(1))
{
string2.Append("<p>" + date.AddMonths(1) + "</p>");
//DateTime ddd = new DateTime(year, month);
string2.Append("<tr>");
for (date = startDate; date <= endDate; date = date.AddMonths(1).AddDays(1))
{
DayOfWeek dw = date.DayOfWeek;
var dateShortHand = "";
switch (dw)
{
case DayOfWeek.Monday:
dateShortHand = "M";
break;
case DayOfWeek.Tuesday:
dateShortHand = "T";
break;
case DayOfWeek.Wednesday:
dateShortHand = "W";
break;
case DayOfWeek.Thursday:
dateShortHand = "T";
break;
case DayOfWeek.Friday:
dateShortHand = "F";
break;
case DayOfWeek.Saturday:
dateShortHand = "S";
break;
case DayOfWeek.Sunday:
dateShortHand = "S";
break;
}
string2.Append("<td>" + dateShortHand + "</td>");
}
string2.Append("</tr>");
string2.Append("<tr>");
//for (int i = 1; i <= ff; date = date.AddDays(1))
//{
// var f = date.Day;
// string2.Append("<td>" + f + "</td>");
//}
string2.Append("</tr>");
}
string2.Append("</table>");
return string2.ToString();
}