1

勤務時間情報が記載されたExcelドキュメントが提供されました。このドキュメントには、ビジュアルスタジオで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 に答える