目前,我正在DateTime
为每个月创建一个,并将其格式化为仅包含月份。
还有其他方法或更好的方法吗?
Answers:
您可以使用DateTimeFormatInfo
获取以下信息:
// Will return January
string name = DateTimeFormatInfo.CurrentInfo.GetMonthName(1);
或获取所有名称:
string[] names = DateTimeFormatInfo.CurrentInfo.MonthNames;
您也可以DateTimeFormatInfo
基于CultureInfo
with实例化一个新属性,DateTimeFormatInfo.GetInstance
也可以使用当前区域性的CultureInfo.DateTimeFormat
属性。
var dateFormatInfo = CultureInfo.GetCultureInfo("en-GB").DateTimeFormat;
请记住,.Net中的日历最多支持13个月,因此对于只有12个月的日历(例如,在en-US或fr中发现的日历),您将在结尾处得到一个额外的空字符串。
Enumerable.Range
因为它DateTimeFormatInfo.MonthNames
返回一个包含13个元素的数组,因此,如果.Select
在那末,您将得到一个空项目。
此方法将允许您将几个月的键值对列表应用于其int对应对象。我们使用Enumerable Ranges和LINQ在一行中生成它。棒棒哒,LINQ代码查询!
var months = Enumerable.Range(1, 12).Select(i => new { I = i, M = DateTimeFormatInfo.CurrentInfo.GetMonthName(i) });
要将其应用于ASP下拉列表:
// <asp:DropDownList runat="server" ID="ddlMonths" />
ddlMonths.DataSource = months;
ddlMonths.DataTextField = "M";
ddlMonths.DataValueField = "I";
ddlMonths.DataBind();
尝试枚举月份名称:
for( int i = 1; i <= 12; i++ ){
combo.Items.Add(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[i]);
}
它在System.Globalization命名空间中。
希望有帮助!
您可以获取的本地化月份列表Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNames
和的不固定月份列表DateTimeFormatInfo.InvariantInfo.MonthNames
。
string[] localizedMonths = Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNames;
string[] invariantMonths = DateTimeFormatInfo.InvariantInfo.MonthNames;
for( int month = 0; month < 12; month++ )
{
ListItem monthListItem = new ListItem( localizedMonths[month], invariantMonths[month] );
monthsDropDown.Items.Add( monthListItem );
}
取决于日历类型,一年中的月数可能会有一些问题,但是在此示例中我仅假设了12个月。
一种使用LINQ在C#中检索动态文化特定月份名称列表的方法。
ComboBoxName.ItemsSource=
System.Globalization.CultureInfo.
CurrentCulture.DateTimeFormat.MonthNames.
TakeWhile(m => m != String.Empty).ToList();
要么
在此示例中,使用Month和MonthName属性创建了一个匿名对象。
var months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
.TakeWhile(m => m != String.Empty)
.Select((m,i) => new
{
Month = i+1,
MonthName = m
})
.ToList();
PS:我们使用方法TakeWhile,因为MonthNames数组包含一个空的第13个月。
当然,我将输入一个10年前的问题。
就我而言,我创建了一个属性,该属性返回由以下代码生成的字典(或类似字典):
Dictionary<int, string> Months = Enumerable.Range(1, 12).Select(i => new KeyValuePair<int, string>(i, System.Globalization.DateTimeFormatInfo.CurrentInfo.GetMonthName(i))).ToDictionary(x => x.Key, x => x.Value);
输出(来自Linqpad):
Key Value
1 January
2 February
3 March
4 April
5 May
6 June
7 July
8 August
9 September
10 October
11 November
12 December
希望有人觉得这有用!
string[] monthNames = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
foreach (string m in monthNames) // writing out
{
Console.WriteLine(m);
}
输出:
January
February
March
April
May
June
July
August
September
October
November
December
更新:请注意,对于不同的语言环境/文化,输出结果可能不是英语。以前没有测试过。
仅适用于美国英语:
string[] monthNames = (new System.Globalization.CultureInfo("en-US")).DateTimeFormat.MonthNames;
我通过以下方式进行操作:(可以设置文化)
var months = Enumerable.Range(1, 12).Select(i =>
new
{
Index = i,
MonthName = new CultureInfo("en-US").DateTimeFormat.GetAbbreviatedMonthName(i)
})
.ToDictionary(x => x.Index, x => x.MonthName);
List<string> mnt = new List<string>();
int monthCount = Convert.ToInt32(cbYear.Text) == DateTime.Now.Year ? DateTime.Now.Month : 12;
for (int i = 0; i < monthCount; i++)
{
mnt.Add(CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]);
}
cbMonth.DataSource = mnt;
这是一个用“信用卡月份”表格填写下拉列表的好例子:
Dim currentCulture As CultureInfo = CultureInfo.CurrentUICulture
Dim monthName, monthNumber As String
For x As Integer = 0 To 11
monthNumber = (x + 1).ToString("D2")
monthName = currentCulture.DateTimeFormat.MonthNames(x)
Dim month As New ListItem(String.Format("{0} - {1}", monthNumber, monthName),
x.ToString("D2"))
ddl_expirymonth.Items.Add(month)
Next
创建以下本地化为当前语言的示例:
01 - January
02 - February
etc.
如何以任何顺序创建自定义的月份名称列表
是的,我正在回答10年前的问题!:D
但是,我想添加此代码段以帮助其他人。它显示了如何以任何自定义顺序输出月份名称列表。就我而言,我需要从10月开始,但是您可以通过设置整数列表将月份按任意顺序设置(甚至有重复的月份)。
model.Controls = new
{
FiscalMonths = new
{
Value = DateTime.Now.Month,
Options = (new List<int> { 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9 }).Select(p => new
{
Value = p,
Text = DateTimeFormatInfo.CurrentInfo.GetMonthName(p)
})
}
};
以及用于下拉列表的json输出:
"FiscalMonths": {
"Value": 10,
"Options": [
{
"Value": 10,
"Text": "October"
},
{
"Value": 11,
"Text": "November"
},
{
"Value": 12,
"Text": "December"
},
{
"Value": 1,
"Text": "January"
},
{
"Value": 2,
"Text": "February"
},
etc ....
DateTimeFormatInfo
GetInstance()
new DateTimeFormatInfo().MonthNames;
DateTimeFormatInfo.GetInstance().MonthNames