1

我得到了一个 Excel 文档,其中记录了工作时间信息,该文档包含某些列,这些列在 Visual Studio 中使用 SSIS 读取,然后将信息写入数据库。

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

我想做的是获取 WeekNr、Year 和 Day 并将它们转换为日期。我一直在尝试通过使用将日数、周数和年份转换为日期的脚本组件来完成此操作,但到目前为止,我还无法从列中获取日数。在我看来,如果使用以该周的第一个和最后一个日期为开始和结束日期的方法效果最好。

所以我的问题是是否有人知道如何做到这一点,或者我是否应该尝试不同的方法。

脚本组件:

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



}
4

1 回答 1

0

基于这个答案,我认为您想要以下内容。此结果为您提供星期一的日期,因此您可以仅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);
于 2015-09-23T12:47:51.350 回答