Hej! Här är en lösning jag gjort tidigare i C#, hopas du har nytta av den och kan konvertera till VB alternativt så använder du mina funktioner skrivna i C# men anropar dem från VB.Datum från vecka och år
Är det någon som har en funktion som beräknar fram ett korrekt datum utifrån en vecka och ett år?
Vecka 1 - 2008 ska alltså ge 2007-12-31 (tror jag?), inte den 1 januari.
Lösningar i MSSQL eller VB.NET är av intresse.
Tack
/TomSv: Datum från vecka och år
Anrop från VB
<code>
Dim dtfuncs As New JBuMiscLibrary.jbuDateAndTime
Dim dt As DateTime
dt = dtfuncs.GetFirstDayOfWeekInYear(1, 2008)
</code>
C# datum metoder
<code>
using System;
using System.Globalization;
namespace JBuMiscLibrary
{
public class jbuDateAndTime
{
CultureInfo mCultureInfo;
Calendar mCalendar;
DayOfWeek mFirstDayOfWeek;
CalendarWeekRule mCalendarWeekRule;
public jbuDateAndTime():this(CultureInfo.CurrentCulture)
{
}
public jbuDateAndTime(CultureInfo cultureInfo)
{
mCultureInfo = cultureInfo;
mCalendar = mCultureInfo.Calendar;
mFirstDayOfWeek = mCultureInfo.DateTimeFormat.FirstDayOfWeek;
mCalendarWeekRule = mCultureInfo.DateTimeFormat.CalendarWeekRule;
}
public int GetWeekNoForDate(DateTime date)
{
int week = mCalendar.GetWeekOfYear(date, mCalendarWeekRule, mFirstDayOfWeek);
return week;
}
public DateTime GetFirstDayOfWeekInYear(int week, int year)
{
return GetDateForDayOfWeekInYear(mFirstDayOfWeek, week, year);
}
public DateTime GetDateForDayOfWeekInYear(DayOfWeek day, int week, int year)
{
DateTime initDate = FirstDayOfYear(year);
int weeksToAdd;
if (GetWeekNoForDate(initDate) > 1)
weeksToAdd = week;
else
weeksToAdd = week - 1;
DateTime dateWeek = mCalendar.AddWeeks(initDate, weeksToAdd);
DateTime dateFirstDayOfWeek = mCalendar.AddDays(dateWeek, day - mCalendar.GetDayOfWeek(dateWeek));
return dateFirstDayOfWeek;
}
private DateTime FirstDayOfYear(int year)
{
return new DateTime(year, 1, 1);
}
}
}
</code>