【问题标题】:How to get week duration based on weeknumber and year如何根据周数和年份获取周持续时间
【发布时间】: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年星期四开始。那么我该如何解决上述问题。

标签: c# date datetime


【解决方案1】:

点击@AlexBell 提供的链接后。

我必须将 startDate 和 endDate 更改为以下内容,它起作用了

DateTime startDate = firstDayOfWeek.AddDays(week * 7);
     DateTime endDate = startDate.AddDays(6);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多