繁体   English   中英

如何通过使用星期数和年份来获取星期的开始和结束日期并将这些日期插入C#中的mysql表中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM