C# 将日历周转换为日期

C# 将日历周转换为日期,c#,.net,vb.net,.net-4.0,calendar,C#,.net,Vb.net,.net 4.0,Calendar,是否有一个简单的内置函数可以用来从日历周/年组合中获取日期实例 应该可以在文本框中输入10w2005,我将从中创建日期2005年3月07日 周一应为第一天,日历周规则应为第一整周 我的第一个方法是: Dim w As Int32 = 10 Dim y As Int32 = 2005 Dim d As New Date(y, 1, 1) d = d.AddDays(7 * w) 但是这不起作用,因为没有应用第一天日历周规则 提前谢谢 编辑: 这就是我的结尾(感谢fjdumont提供的链接): 公

是否有一个简单的内置函数可以用来从日历周/年组合中获取日期实例

应该可以在文本框中输入
10w2005
,我将从中创建日期
2005年3月07日

周一应为第一天,日历周规则应为第一整周

我的第一个方法是:

Dim w As Int32 = 10
Dim y As Int32 = 2005
Dim d As New Date(y, 1, 1)
d = d.AddDays(7 * w)
但是这不起作用,因为没有应用第一天日历周规则

提前谢谢

编辑

这就是我的结尾(感谢fjdumont提供的链接):

公共共享函数FirstDateOfWeek(ByVal year为整数,ByVal weekOfYear为整数)为DateTime
Dim jan1作为新日期时间(年份,1,1)
Dim Daysofset As Integer=CInt(Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek)-CInt(jan1.DayOfWeek)
Dim firstWeekDay As DateTime=jan1.AddDays(Daysofset)
将文化定义为System.Globalization.CultureInfo=System.Globalization.CultureInfo.CurrentCulture
Dim firstWeek As Integer=curCulture.Calendar.GetWeekOfYear(1月1日,curCulture.DateTimeFormat.CalendarWeekRule,curCulture.DateTimeFormat.FirstDayOfWeek)
如果第一周应该有帮助。您必须解析字符串,有点像这样

string[] spl = input.ToLower().Split("w");
int year = int.Parse(spl[1]);
int week = int.Parse(spl[0]);
应该有帮助。您必须解析字符串,有点像这样

string[] spl = input.ToLower().Split("w");
int year = int.Parse(spl[1]);
int week = int.Parse(spl[0]);
Dim dfi As Globalization.DateTimeFormatInfo=Globalization.DateTimeFormatInfo.CurrentInfo
Dim cal作为Globalization.Calendar=dfi.Calendar
'10w2005
尺寸w为整数=10'周
Dim y作为整数=2005
Dim d As DateTime=新的DateTime(y,1,1)
如果cal.GetWeekOfYear(d,Globalization.CalendarWeekRule.FirstFullWeek,DayOfWeek.Monday)1,则
w-=1
d=d.AddDays(8-d.DayOfWeek)
如果结束
d=d.add天(7*w)
Debug.WriteLine(d.ToString)
将dfi设置为全球化。DateTimeFormatInfo=全球化。DateTimeFormatInfo.CurrentInfo
Dim cal作为Globalization.Calendar=dfi.Calendar
'10w2005
尺寸w为整数=10'周
Dim y作为整数=2005
Dim d As DateTime=新的DateTime(y,1,1)
如果cal.GetWeekOfYear(d,Globalization.CalendarWeekRule.FirstFullWeek,DayOfWeek.Monday)1,则
w-=1
d=d.AddDays(8-d.DayOfWeek)
如果结束
d=d.add天(7*w)
Debug.WriteLine(d.ToString)

所以答案是:没有简单的内置函数。谢谢。所以答案是:没有简单的内置函数。谢谢。我已经在问题中添加了我的解决方案。无论如何,谢谢。我已经把我的答案添加到我的问题中了。无论如何,谢谢你。
    Dim dfi As Globalization.DateTimeFormatInfo = Globalization.DateTimeFormatInfo.CurrentInfo
    Dim cal As Globalization.Calendar = dfi.Calendar

    '10w2005
    Dim w As Integer = 10 'week
    Dim y As Integer = 2005
    Dim d As DateTime = New DateTime(y, 1, 1)

    If cal.GetWeekOfYear(d, Globalization.CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday) <> 1 Then
        w -= 1
        d = d.AddDays(8 - d.DayOfWeek)
    End If

    d = d.AddDays(7 * w)
    Debug.WriteLine(d.ToString)