2015-09-23 93 views
1

我已经给出了一个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); 



} 
+0

请参阅[我应该在标题中使用标签吗?](http://meta.stackexchange.com/help/tagging)。 – pnuts

回答

0

基于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); 
+0

这样做伎俩谢谢! – Alim

+0

关于如何在多天填充时将单行分成多行的任何想法? – Alim

+0

鉴于上述脚本,您需要通过查看Row.Monday,Row.Tuesday等中的值来访问每行的列内容...... – sorrell

相关问题