如何獲得dates
在給定月份和年份的特定一週?如何根據月份和年份獲得特定一週中的日期集合?
例如:
我的參數:
June - 2013 - The second week
我想要的結果集是這樣的:
9-6-2013
10-6-2013
11-6-2013
12-6-2013
13-6-2013
我想從太陽開始星期四
如何獲得dates
在給定月份和年份的特定一週?如何根據月份和年份獲得特定一週中的日期集合?
例如:
我的參數:
June - 2013 - The second week
我想要的結果集是這樣的:
9-6-2013
10-6-2013
11-6-2013
12-6-2013
13-6-2013
我想從太陽開始星期四
好:
foreach
環路):所以:
IEnumerable<LocalDate> GetSundayToWednesday(int year, int month, int week)
{
LocalDate date = new LocalDate(year, month, 1).PlusDays(-1);
for (int i = 0; i < week; i++)
{
date = date.Next(IsoDayOfWeek.Sunday);
}
// You always want 4 days, Sunday to Wednesday
for (int i = 0; i < 4; i++)
{
yield return date;
date = date.PlusDays(1);
}
}
只需使用DateTime
,我可能會開始在每月的第一天,它可能是(周* 7 + 1)和循環,直到我打了一週的天權,然後再從那裏:
IEnumerable<DateTime> GetSundayToWednesday(int year, int month, int week)
{
// Consider breaking this part out into a separate method?
DateTime date = new DateTime(year, month, week * 7 + 1);
for (int i = 0; i < 7; i++)
{
if (date.DayOfWeek == DayOfWeek.Sunday)
{
break;
}
date = date.AddDays(1);
}
// You always want 4 days, Sunday to Wednesday
for (int i = 0; i < 4; i++)
{
yield return date;
date = date.AddDays(1);
}
}
循環這樣是不是非常高效的 - 你可以只工作了多少天來推進 - 但更明顯的是對。使用更有效的方法很容易導致逐個錯誤(或回到上個月)。當然,如果這很重要,你可以選擇更加努力地提高效率。
我只是想說,StackOverflow先生在野田時間工作,他會推薦它! :-) –
我還沒有真正測試了這一點,但我認爲這確實或多或少你想要什麼:
int year = 2013;
int month = 6;
int lookupWeek = 2;
int daysInMonth = DateTime.DaysInMonth(year, month);
int weekCounter = 1;
List<DateTime> weekDays = new List<DateTime>();
for (int day = 1; day <= daysInMonth; day++)
{
DateTime date = new DateTime(year,month,day);
if(date.DayOfWeek == DayOfWeek.Sunday && day > 1) weekCounter++;
if(weekCounter == lookupWeek) weekDays.Add(date);
}
用更清晰的變量名稱更新了幾次,並修正了星期編號。 –
這種方法使天在一個月的特定星期:
static IEnumerable<string> DaysInWeek(int year, int month, int week)
{
var date = new DateTime(year, month, 1);
var calendar = new GregorianCalendar();
var firstWeek = calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday);
var days = calendar.GetDaysInMonth(year, month);
var daysInWeek = (from day in Enumerable.Range(0, calendar.GetDaysInMonth(year, month) - 1)
let dayDate = date.AddDays(day)
let week2 = calendar.GetWeekOfYear(dayDate, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday) - firstWeek + 1
where week2 == week
select day + 1).ToList();
foreach (var d in daysInWeek) yield return string.Format("{0:00}-{1:00}-{2:0000}", d, month, year);
}
並在此輸出:
foreach (var d in DaysInWeek(week, year, month).Take(5)) Log.Info(d);
是:
09-06-2013
10-06-2013
11-06-2013
12-06-2013
13-06-2013
注:我編輯了代碼。有一個小錯誤;因爲在很多個月中,第一週和上週都不是完整的周,而那一週的某些日子屬於另一個月。
如果你有興趣的客戶端(JavaScript)的路線,然後date.js可能是值得一看,它允許以下:
// What date is next thursday?
Date.today().next().thursday();
// Add 3 days to Today
Date.today().add(3).days();
// Is today Friday?
Date.today().is().friday();
// Number fun
(3).days().ago();
// 6 months from now
var n = 6;
n.months().fromNow();
// Set to 8:30 AM on the 15th day of the month
Date.today().set({ day: 15, hour: 8, minute: 30 });
// Convert text into Date
Date.parse('today');
Date.parse('t + 5 d'); // today + 5 days
Date.parse('next thursday');
Date.parse('February 20th 1973');
Date.parse('Thu, 1 July 2004 22:30:00');
我找到自然語言的語法(即「下週四')相當強大。
試試這個
protected void button_click(object sender, EventArgs e)
{
DateTime dt = new DateTime(2013, 6, 1);
string[] dates = getDates(dt);
}
public string[] getDates(DateTime dt)
{
string[] result = new string[7]; ;
for (int i = getDay(dt.DayOfWeek.ToString()); i < 7; i++)
{
if (i == 0)
{
break;
}
else
{
dt = dt.AddDays(1);
}
}
for (int i = 0; i < 7; i++)
{
dt = dt.AddDays(1);
result[i] = dt.ToShortDateString();
}
return result;
}
public int getDay(string day)
{
switch (day)
{
case "Monday":
return 0;
case "Tuesday":
return 1;
case "Wednesday":
return 2;
case "Thursday":
return 3;
case "Friday":
return 4;
case "Saturday":
return 5;
case "Sunday":
return 6;
default:
return 0;
}
}## Heading ##
-1:「試試這個」沒有**任何**評論是不是一個好的格式在SO上的答案。 –
如果你熱衷於使用LINQ(我幾乎總是在這裏!),你可以這樣做:
int year = 2013;
int month = 6;
int weekOfMonth = 2;
var dates = Enumerable.Range(1, DateTime.DaysInMonth(year, month))
.Select(day => new DateTime(year, month, day))
.GroupBy(g=> g.DayOfYear/7)
.ToList();
var week = dates.Min(g => g.Key) + weekOfMonth - 1;
var result = dates.Where(g=> g.Key.Equals(week)).Select(g => g.ToList());
你是如何定義 「周」?總是從第8開始?總是從星期六開始? ISO術語中的星期幾? –
我希望它從星期天到星期三開始,在我的例子中是第二週 –
那麼編寫代碼的問題到底是什麼?搞清楚某一天的某一天是哪一天?查找給定月份的第一天?增加天數直到你找到符合你的標準的第一天?數到7? –