如何根据c#中的当前日期获取前一周的数字?

时间:2015-01-02 15:12:33

标签: c#

我希望在c#中获得上一年的前一周的数字。例如,今天是2015年的第1周,我希望在2014年的第52周获得上周。

目前我的代码是,

var weekNo = currentCulture.Calendar.GetWeekOfYear(
             DateTime.Now.Date,
             currentCulture.DateTimeFormat.CalendarWeekRule,
             currentCulture.DateTimeFormat.FirstDayOfWeek);

它返回第1周。我有一个循环,曾经从周数 1 运行到 weekNo - 1 以获取去年的数据,但现在 weekNo - 1 返回0,我希望它返回52.

所以,它应该是这样的,

int lastweekNo = lastWeek(datetime.today);  //returns 52 for today's date, 1 for next Monday's date,..

让我知道如何实现这一目标。任何想法将不胜感激。

感谢。

4 个答案:

答案 0 :(得分:7)

如果这给你当前的周数:

currentCulture.Calendar.GetWeekOfYear(
    DateTime.Now.Date,
    currentCulture.DateTimeFormat.CalendarWeekRule,
    currentCulture.DateTimeFormat.FirstDayOfWeek);

这不会给你前一周的号码吗?

currentCulture.Calendar.GetWeekOfYear(
    DateTime.Now.AddDays(-7).Date,
    currentCulture.DateTimeFormat.CalendarWeekRule,
    currentCulture.DateTimeFormat.FirstDayOfWeek);

答案 1 :(得分:1)

要获取前一周的周数,只需获取七天前一周的周数:

var weekNo = currentCulture.Calendar.GetWeekOfYear(
         DateTime.Now.Date.AddDays(-7),
         currentCulture.DateTimeFormat.CalendarWeekRule,
         currentCulture.DateTimeFormat.FirstDayOfWeek);

答案 2 :(得分:0)

  

我想获得上一年的前一周的数量

目前尚不清楚“前一年的前一周”是什么。

  

今天是2015年第1周,我想在2014年第52周的最后一周获得

获取上一年的最后一周的数字:

GetWeekOfYear(new DateTime(DateTime.Now.Year - 1, 12, 31), … )
  

它返回第1周。我有一个循环,用于从第1周到第1周 - 1获取去年的数据,但现在weekNo - 1返回0,我希望它返回52。

因此,如果您的循环是从1week - 1,那么在week具有值1的情况下,它是正确的,它没有&#39 ; t执行。您无法接受DateTime.Now,并且在没有任何进一步限制的情况下,假设周数与您尝试使用的年份相对应。

答案 3 :(得分:0)

假设您使用星期一作为一周的第一天。

 DateTime sundayOfLastWeek = DateTime.Now.Date.AddDays(-(int)DateTime.Now.Date.DayOfWeek);

 MessageBox.Show(GetIso8601WeekOfYear(sundayOfLastWeek).ToString());

GetIso8601WeekOfYear

public static int GetIso8601WeekOfYear(DateTime time)
        {

            DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time);
            if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
            {
                time = time.AddDays(3);
            }

            // Return the week of our adjusted day
            return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
        } 

The above code is taken from this link