2009-11-09 142 views
3

我有这在我的部分观点:语言设置为瑞典

<tr> 
    <% for (int currentDay = 0; currentDay < 7; currentDay++) 
     { %> 
    <th> 
    <%= System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames[currentDay] %> 
    </th> 
    <% } %> 
</tr> 

的工作日名称瑞典正确地呈现,但不知何故,周星期日开始,而本周在瑞典的第一天是星期一。我怎样才能解决这个问题?

此外,是否有一些简单的方法可以使它在星期几名称中的首字母大写?

回答

4

这并不奇怪,DayOfWeek枚举定义为星期日= 0。您必须自己做,使用DateTimeFormatInfo.FirstDayOfWeekSystem.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),得到的第一个字符了。

1

我想你错过了解DayNames的目的。它将始终以“星期天”或适用于“星期天”的语言开头。不管使用哪种文化。

考虑以下代码: -

string dayname = myCulture.DateTimeFormat.DayNames[myCulture.DateTimeFormat.FirstDayOfWeek] 

什么,你会期望Firstdayofweek可将在瑞典文化? Ans:1
你会期望在dayname中找到什么? Ans:“Monday”的瑞典语名称
因此,您需要将DayNames的元素1设置为“Monday”,并且您希望位置0之前的名称是“Sunday”的名称。

0

你可以做这样的事情:

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>