.net 在某些文化中,如何获得一年中的一周?

.net 在某些文化中,如何获得一年中的一周?,.net,calendar,gregorian-calendar,persian,.net,Calendar,Gregorian Calendar,Persian,我想获得一年中的一周(在当前文化中),所以我做到了: var week = CultureInfo.CurrentCulture.Calendar .GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek); 当前区域性为fa-IR(波斯语)时,日历为gregoriacalen

我想获得一年中的一周(在当前文化中),所以我做到了:

var week = CultureInfo.CurrentCulture.Calendar
           .GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay,
                          DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek);
当前区域性为
fa-IR
(波斯语)时,日历为
gregoriacalendar
week
值为24(波斯语为第13周)

但如果我用PersianCalendar测试它,如下所示:

 var calendar = new PersianCalendar();
 var week = calendar
           .GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay,
                          DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek);
它给出了一个真实的答案(13)

我查过文化的日历是波斯的:

var persianCultures = CultureInfo.GetCultures(CultureTypes.AllCultures)
                       .Where(x => x.Calendar is PersianCalendar).ToList();
但是没有文化

但我需要这种文化,因为我认为检查日历是否是公历不好,然后使用波斯语,如果你有更好的想法或对此有任何了解,请让我知道

(据我所知,公历很古老,如果我没记错的话,上面发生的事情(公历)是错误的。它应该和波斯历相似。)


总之,这是.NET framework的一个限制,但是可以通过反射解决问题。

这很好,但它并不能减少我的
if then else
问题,我不能更改默认日历(因为对其他团队有副作用),但我可以在本地更改它,但在这种情况下,
if then else
存在。@Diego Mijelshon,我不知道你为什么把C标签从这个问题中删除,可能是在其他语言中没有这样的问题,也就是波斯日历是针对C++的(我知道gerigorian在C++中是第一个可用的,但是我现在讲的是C),请阅读我的修订意见。C#3.5不存在(您错误地创建了该标记),并且该问题与C#语言无关,而是与.NET framework有关,因此我现在添加了该标记。@Diego Mijelshon,很抱歉,您是对的。