【问题标题】:Converting day, weeknr and year to date转换日期、周末和年初至今
【发布时间】:2015-09-23 08:14:34
【问题描述】:

我收到了一份记录工作时间信息的 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);



}

【问题讨论】:

    标签: sql-server excel date ssis script-component


    【解决方案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);
    

    【讨论】:

    • 知道当多天被填满时如何将单行拆分为多行吗?
    • 鉴于上述脚本,您需要通过查看 Row.Monday、Row.Tuesday 等中的值来访问每一行的列内容...
    • 好吧,我做到了,但它只在一天内有效,而不是在多天被填满时。我用过: if(monday != null){ daysOffset = DayOfWeek.Monday - jan1.DayOfWeek;}
    • 我编辑了答案 - 这是否有助于您了解如何获取所有工作日的日期?
    • 是的,我明白了这一点,但我的意思有所不同,假设会议任务有 2 个值,一个在星期二,一个在星期四。如果我有这样的行,我想将其分成 2 行,即周二一行,周四一行。
    猜你喜欢
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 2018-04-25
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    相关资源
    最近更新 更多