【发布时间】:2015-05-27 11:05:12
【问题描述】:
我尝试了以下解决方案,但我无法实现。
例如:2015 年 7 月应返回 2015 年 2 月 15 日 → 2015 年 2 月 21 日
private string GetWeekPeriod(string weekYear)
{
CultureInfo defaultCultureInfo = CultureInfo.CurrentCulture;
int firstDayOfWek = (int)defaultCultureInfo.DateTimeFormat.FirstDayOfWeek;
string result = string.Empty;
string[] weekAndYear = weekYear.Split(new char[] { ',' });
int week = Convert.ToInt32(weekAndYear[0]);
int year = Convert.ToInt32(weekAndYear[1]);
DateTime jan1 = new DateTime(year, 1, 1);
int daysOffset = firstDayOfWek - (int)jan1.DayOfWeek;
DateTime firstDayOfWeek = jan1.AddDays(daysOffset);
var cal = CultureInfo.CurrentCulture.Calendar;
var dateTimeFormat = CultureInfo.CurrentCulture.DateTimeFormat;
int firstWeek = cal.GetWeekOfYear(firstDayOfWeek, dateTimeFormat.CalendarWeekRule, dateTimeFormat.FirstDayOfWeek);
if (firstWeek <= 1)
{
week -= 1;
}
DateTime endDate = firstDayOfWeek.AddDays((week * 7) - 1);
DateTime startDate = endDate.AddDays(-6);
result = startDate.ToShortDateString() + " - " + endDate.ToShortDateString();
return result;
}
【问题讨论】:
-
我不明白。从 2 月 5 日到 2 月 11 日,2015 年的第 7 周到底有多长?
-
@SonerGönül 我猜这是基于 2015 年从星期四开始,所以所有周都从星期四开始(而不是使用区域设置规则)
-
此外,您需要真正准确地了解周编号 - 有很多不同的方案。例如,.NET 不太支持 ISO-8601。
-
@RowlandShaw 那么 2 月 5 日不是第 7 周的开始,而是第 6 周的开始。
-
好的,是的,2015年星期四开始。那么我该如何解决上述问题。