2009-11-09 3 views
3

У меня есть это в моем частичном виде:Установить язык Шведского

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

имен буднего дня правильно делают на шведском языке, но как-то неделя начинается с воскресеньем, в то время как первый день недели в Швеции понедельник. Как я могу это исправить?

И, кроме того, есть ли простой способ заставить его перенести первую букву в именах дней недели как прописные?

ответ

4

Это не странно, перечисление 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), чтобы получить первый символ вверх.

1

Я думаю, вы пропустите понимание цели DayNames. Он всегда будет начинаться с «воскресенья» или соответствующего эквивалента языка «воскресенье». Независимо от того, какая культура используется.

Рассмотрим этот код: -

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

Что бы ожидать FirstDayOfWeek быть в шведской культуре? Ans: 1
Что бы вы ожидали найти в dayname? Ans: Шведское название для «Понедельника»
Следовательно, вам нужно, чтобы элемент 1 для DayNames был «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> 
Смежные вопросы