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

How to get a previous week number based on current date in c#?

我想在 C# 中获取前一年的前一周的数字。例如,今天是 2015 年的第 1 周,我想获得 2014 年第 52 周的最后一周。

目前我的代码是,

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

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

所以,应该是这样的,

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

让我知道我怎样才能做到这一点。任何想法将不胜感激。

谢谢。

I want to get the number of previous week of previous year

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

today is week 1 of 2015 and I want to get the last week as in week number 52 of year 2014

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

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

And it returns week 1. I have a loop which used to run from week number 1 to weekNo - 1 to get the data of last year but now weekNo - 1 returns 0 and I want it to return 52.

因此,如果您的循环是从 1week - 1,那么如果 week 的值为 1,它不会在全部。您不能接受 DateTime.Now,并且在没有任何进一步限制的情况下,假设周数与您尝试使用的年份相对应。

要获取前一周的周数,只需获取7天前那一天的周数即可:

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

如果这为您提供当前周数:

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);

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

 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