2015-09-23 2 views
1

On m'a donné un document Excel dans lequel des informations sur le temps de travail sont notées, ce document contient certaines colonnes qui sont lues en utilisant SSIS en studio visuel, après que l'information est écrite sur un Base de données.Jour de la conversion, semaine et année à ce jour

La colonne semaine et année contient le numéro de semaine et l'année, les colonnes du lundi au vendredi contiennent des informations sur le nombre d'heures de travail consacrées à une tâche donnée ce jour de la semaine.

Ce que je voudrais faire est de prendre la semaine, l'année et le jour et de les convertir en une date. J'ai essayé d'accomplir ceci en employant un composant de manuscrit qui convertit un nombre de jour, un nombre de semaine et une année en date mais jusqu'ici je n'ai pas pu obtenir le nombre de jour des colonnes. À mon avis, cela fonctionnerait mieux si utilisé avec une date de début et de fin en prenant la première et la dernière date de cette semaine. Donc, ma question est de savoir si quelqu'un sait comment accomplir cela, ou si je devrais essayer une approche différente.

Le composant de script:

 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

Veuillez consulter [Dois-je utiliser des balises dans les titres?] (Http://meta.stackexchange.com/help/tagging). – pnuts

Répondre

0

Basé sur this answer, je pense que vous voulez quelque chose comme ce qui suit. Ce résultat vous donne la date du lundi, donc vous pouvez juste AddDays basé sur le jour de la colonne de la semaine.

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

Cela a fait l'affaire merci! – Alim

+0

Une idée sur la façon de diviser une seule ligne en plusieurs lignes lorsque plusieurs jours sont remplis? – Alim

+0

Étant donné le script ci-dessus, vous aurez besoin d'accéder au contenu de la colonne de chaque ligne en regardant la valeur dans Row.Monday, Row.Tuesday, etc ... – sorrell