语言设置为瑞典
问题描述:
我有这在我的部分观点:语言设置为瑞典
<tr>
<% for (int currentDay = 0; currentDay < 7; currentDay++)
{ %>
<th>
<%= System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames[currentDay] %>
</th>
<% } %>
</tr>
的工作日名称瑞典正确地呈现,但不知何故,周星期日开始,而本周在瑞典的第一天是星期一。我怎样才能解决这个问题?
此外,是否有一些简单的方法可以使它在星期几名称中的首字母大写?
答
这并不奇怪,DayOfWeek枚举定义为星期日= 0。您必须自己做,使用DateTimeFormatInfo.FirstDayOfWeek
在System.Globalization
。
正确的代码是:
CultureInfo ci = new CultureInfo("sv-SE");
int substraction = (int)ci.DateTimeFormat.FirstDayOfWeek;
int dayToGet = 0; //should return monday
var daynames = ci.DateTimeFormat.DayNames;
string day = daynames[dayToGet + substraction >= 7
? (dayToGet + substraction - 7) : dayToGet+substraction];
DAYNAME到上取决于你的文化背景,所以我想在瑞典这一切都较低的情况下,你可以做str.Substring(0,1).ToUpper() + str.Substring(1)
,得到的第一个字符了。
答
我想你错过了解DayNames的目的。它将始终以“星期天”或适用于“星期天”的语言开头。不管使用哪种文化。
考虑以下代码: -
string dayname = myCulture.DateTimeFormat.DayNames[myCulture.DateTimeFormat.FirstDayOfWeek]
什么,你会期望Firstdayofweek可将在瑞典文化? Ans:1
你会期望在dayname中找到什么? Ans:“Monday”的瑞典语名称
因此,您需要将DayNames的元素1设置为“Monday”,并且您希望位置0之前的名称是“Sunday”的名称。
答
你可以做这样的事情:
for (int currentDay = 0; currentDay < 7; currentDay++)
{
int currentLocalizedDay = ((int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek + currentDay) % 7;
Console.WriteLine(CultureInfo.CurrentCulture.DateTimeFormat.DayNames[currentLocalizedDay]);
}
或更改原有的代码,这样的事情:
<tr>
<% for (int currentDay = (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; currentDay < 7; currentDay = (currentDay + 1 % 7))
{ %>
<th>
<%= System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames[currentDay] %>
</th>
<% } %>
</tr>