从当前日期(SSIS脚本任务)获取周数和年份YYYYWW以及将来N周

时间:2013-04-26 23:48:28

标签: c# .net ssis nodatime

我看过this answer,它解释了我如何获得相关的周数。

有没有人知道如何将格式更改为年份和周,例如YYYYWW,即201317

基于第17周,如何在N周时间内获得正确的年份和周?即从本周开始的60周,包括本周?但作为YYYYWW,在给定年份中具有正确的年份和周数?

我正在尝试在支持.NET 3.5的SSIS包2008的脚本组件中执行此操作。

我也尝试在包内的脚本任务中引用NodaTime,我可以很好地引用它并构建脚本,但是当我在我的机器上执行任务时,我获得了NodaTime的FileNotFound Exception的.dll。

尝试使用.NET 3.5和C#实现这一目标的任何帮助都将不胜感激。

更新:以下是我最近获得的一些周数据的示例。我不知道我的确切要求,但我仍然不知道。这对我来说就像星期天开始的几个星期,并且在今年年底没有闰周。我只能猜测这是格里高利历,还是对它的修改。

enter image description here

1 个答案:

答案 0 :(得分:2)

使用System.Globalization.CultureInfo计算当前周的方法非常简单:

using System.Globalization;

CalendarWeekRule weekRule = CalendarWeekRule.FirstFourDayWeek;
DayOfWeek firstWeekDay = DayOfWeek.Monday;
Calendar calendar = System.Threading.Thread.CurrentThread.CurrentCulture.Calendar;

int currentWeek = calendar.GetWeekOfYear(DateTime.Now, weekRule, firstWeekDay)

上述方法几乎(见Jon Skeet的linked article)返回ISO 8601 week date;这是许多政府和行业(包括进出口和跨国公司)使用的标准。

为了获得所需的YYYYWW格式,只需使用:

String myYYYYWW = String.Format("{0:0000}{1:00}", DateTime.Now.Year, currentWeek);

要在将来获得N周,您可以让DateTime班为您进行计算......

DateTime myFutureWeek = DateTime.Now.AddDays(N * 7); // add N weeks

// ... steps outlined above ...

int futureWeek = calendar.GetWeekOfYear(myFutureWeek, weekRule, firstWeekDay)

如果您希望偏离几乎ISO周数,只需更改weekRulefirstWeekDay变量即可。您可能还想玩calendar特定文化。

关于ISO周日的维基百科文章,包含other week numbering systems的部分,例如在美国使用的部分。