繁体   English   中英

如何在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);

它返回第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,..

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

谢谢。

如果这给您当前的星期数:

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

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

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

我想获取上一年的前一周数

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

今天是2015年的第1周,我想获取最后一周,就像2014年的第52周一样

要获取上一年的最后一周的编号:

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

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

因此,如果您的循环是从1week - 1 ,那么如果week的值为1 ,那么它根本不会执行是正确的。 现在,您不能使用DateTime.Now ,没有任何进一步的限制,假定星期数将与您尝试使用的年份相对应。

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

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

上面的代码来自此链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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