我在局部视图中有这个:
<tr>
<% for (int currentDay = 0; currentDay < 7; currentDay++)
{ %>
<th>
<%= System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames[currentDay] %>
</th>
<% } %>
</tr>
工作日名称在瑞典语中正确呈现,但不知何故,周从星期日开始,而瑞典的第一天是星期一。我该如何解决这个问题?
此外,是否有一些简单的方法可以将工作日名称中的第一个字母呈现为大写?
答案 0 :(得分: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];
上面的日期取决于你的文化背景,所以我猜在瑞典它是小写的,你可以str.Substring(0,1).ToUpper() + str.Substring(1)
来获得第一个字符。
答案 1 :(得分:1)
我想你错过了解DayNames的目的。它将始终以“星期日”或相应的“星期日”语言开头。无论使用哪种文化。
考虑以下代码: -
string dayname = myCulture.DateTimeFormat.DayNames[myCulture.DateTimeFormat.FirstDayOfWeek]
您对FirstDayOfWeek在瑞典文化中的期望是什么?答案:1
你期望在dayname中找到什么?答:“星期一”的瑞典名字
因此,您需要将DayNames的元素1设置为“星期一”,并且您希望位于0的前一个名称是“星期日”的名称。
答案 2 :(得分: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>