![](/img/trans.png)
[英]Calculate the start and end date of a week given the week number and year in C# (based on the ISO specification)
[英]How to get start and end date of week by using week number and year and insert those dates into mysql table in c#
我想做的是從asp下拉列表中選擇一年中的星期數,我想將星期的開始和結束日期之間的日期插入MySql表中。 但是,當我嘗試它時,我並沒有收到錯誤,而是表中充滿了01-01-0001,並且它繼續運行而沒有停止,並且連接沒有關閉,因為它處於循環狀態。
private IEnumerable<Week> GetWeeksOfTheYear(int year)
{
var firstDayOfYear = new DateTime(year, 1, 1);
var beginningDayOfWeek = firstDayOfYear.AddDays(-1 * Convert.ToInt32(firstDayOfYear.DayOfWeek));
var endingDayOfWeek = beginningDayOfWeek.AddDays(6);
var weekOfYear = 1;
var weeksOfTheYear = new List<Week>();
while (beginningDayOfWeek.Year < year + 1)
{
var week = new Week { Number = weekOfYear, BeginningOfWeek = beginningDayOfWeek };
weeksOfTheYear.Add(week);
beginningDayOfWeek = beginningDayOfWeek.AddDays(7);
weekOfYear++;
}
return weeksOfTheYear;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
ddlweek.DataSource = this.GetWeeksOfTheYear(DateTime.Now.Year);
ddlweek.DataBind();
ddlweek.Items.Insert(0, new ListItem("--Select--", ""));
}
}
private class Week
{
public DateTime BeginningOfWeek { get; set; }
public DateTime EndOfWeek { get { return this.BeginningOfWeek.AddDays(6); } }
public int Number { get; set; }
public string Text { get { return this.ToString(); } }
public override string ToString()
{
return DateTime.Now > BeginningOfWeek && DateTime.Now < EndOfWeek
? String.Format(
"Week {0} or current week: {1} - {2}",
this.Number,
this.BeginningOfWeek.ToShortDateString(),
this.EndOfWeek.ToShortDateString())
: String.Format(
"Week {0}: {1} - {2}",
this.Number,
this.BeginningOfWeek.ToShortDateString(),
this.EndOfWeek.ToShortDateString());
}
}
DateTime BeginningOfWeek { get; set; }
DateTime EndOfWeek { get; set; }
我從上面填充了下拉列表。
protected void Test_Click(object sender, EventArgs e)
{
for(DateTime date = BeginningOfWeek; date <= EndOfWeek; date.AddDays(1))
{
MySqlConnection con = new MySqlConnection("Server=localhost;Database=mydb;Uid=myid;Pwd=abc123;");
MySqlCommand cmd = new MySqlCommand("INSERT INTO shrinkageTool(date) VALUES(@date)");
cmd.Connection = con;
cmd.Parameters.AddWithValue("@date", date);
con.Open();
int result = cmd.ExecuteNonQuery();
con.Close();
}
}
那么我該如何解決呢? 提前致謝。
1)要獲得特定年份的幾周,您必須使用Calendar.GetWeekOfYear
public List<int> GetWeeksInYear(int year)
{
DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
DateTime date1 = new DateTime(year, 12, 31);
System.Globalization.Calendar cal = dfi.Calendar;
int weeks = cal.GetWeekOfYear(date1, dfi.CalendarWeekRule,
dfi.FirstDayOfWeek);
List<int> weekList = new List<int>();
for (int i = 1; i <= weeks; i++)
{
weekList.Add(i);
}
return weekList;
}
2)要獲得星期的第一天,然后通過年份,您需要從上面的列表中選擇周號,
public static DateTime FirstDateOfWeek(int year, int weekOfYear, System.Globalization.CultureInfo ci)
{
DateTime jan1 = new DateTime(year, 1, 1);
int daysOffset = (int)ci.DateTimeFormat.FirstDayOfWeek - (int)jan1.DayOfWeek;
DateTime firstWeekDay = jan1.AddDays(daysOffset);
int firstWeek = ci.Calendar.GetWeekOfYear(jan1, ci.DateTimeFormat.CalendarWeekRule, ci.DateTimeFormat.FirstDayOfWeek);
if ((firstWeek <= 1 || firstWeek >= 52) && daysOffset >= -3)
{
weekOfYear -= 1;
}
return firstWeekDay.AddDays(weekOfYear * 7);
}
3)要獲取一周的最后一天,則將6天添加到firstDayOfWeek
例如
public static DateTime LastDayOfWeek(DateTime firstDayOfWeek)
{
return firstDayOfWeek.AddDays(6);
}
4)並使用上述日期
protected void Test_Click(object sender, EventArgs e)
{
List<int> weekNumbers = GetWeeksInYear(2018);
DateTime firstDayOfWeek = FirstDateOfWeek(2018, weekNumbers.ElementAt(3), CultureInfo.CurrentCulture);
DateTime lastDayOfWeek = LastDayOfWeek(firstDayOfWeek);
for (var date = firstDayOfWeek; date.Date <= lastDayOfWeek; date = date.AddDays(1))
{
//Your rest of code is same here
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.