将日期、星期和年份转换为日期

Converting day, weeknr and year to date

我得到了一份 excel 文档,其中记录了工作时间信息,该文档包含某些列,这些列在 visual studio 中使用 SSIS 读取,之后信息被写入数据库。

周和年列包含周数和年份,周一到周五的列包含有关在一周中的这一天在某项任务上花费了多少工作时间的信息。

我想做的是将周号、年和日转换成日期。我一直在尝试通过使用将天数、周数和年份转换为日期的脚本组件来实现此目的,但到目前为止我还无法从列中获取天数。在我看来,如果将开始日期和结束日期与该周的第一个和最后一个日期一起使用,效果最好。

所以我的问题是是否有人知道如何完成这个,或者我是否应该尝试不同的方法。

脚本组件:

     public override void Input0_ProcessInputRow(Input0Buffer Row, CultureInfo cultureInfo, int day )
{

    DateTime firstDayOfYear = new DateTime(Int32.Parse(Row.Jaar), 1, 1);
    int firstWeek = cultureInfo.Calendar.GetWeekOfYear(firstDayOfYear, cultureInfo.DateTimeFormat.CalendarWeekRule, cultureInfo.DateTimeFormat.FirstDayOfWeek);
    int dayOffSet = day - (int)cultureInfo.DateTimeFormat.FirstDayOfWeek + 1;
    Row.TaskDates = firstDayOfYear.AddDays((Int32.Parse(Row.Week) - (firstWeek + 1)) * 7 + dayOffSet + 1);



}

基于 this answer,我认为您需要如下内容。此结果为您提供星期一的日期,因此您可以 AddDays 基于星期几的列。

DateTime jan1 = new DateTime(Int32.Parse(Row.Jaar), 1, 1);
int daysOffset = DayOfWeek.Monday - jan1.DayOfWeek;

DateTime firstMonday = jan1.AddDays(daysOffset);
var cal = CultureInfo.CurrentCulture.Calendar;

int firstWeek = cal.GetWeekOfYear(firstMonday, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday);

var weekNum = Int32.Parse(Row.Week);
if (firstWeek <= 1)
{
    weekNum -= 1;
}
var mondaysDate = firstMonday.AddDays(weekNum * 7);
var tuesdaysDate = mondaysDate.AddDays(1);