Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何列出所有月份名称,例如组合?_C#_Asp.net_.net_Datetime - Fatal编程技术网

C# 如何列出所有月份名称,例如组合?

C# 如何列出所有月份名称,例如组合?,c#,asp.net,.net,datetime,C#,Asp.net,.net,Datetime,目前,我正在为每个月创建一个DateTime,并将其格式设置为仅包含该月。 是否有其他或更好的方法来执行此操作?您可以使用以下方法返回包含月份名称的字符串数组 System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames 您可以使用获取该信息: // Will return January string name = DateTimeFormatInfo.CurrentInfo.GetMonthName(1)

目前,我正在为每个月创建一个
DateTime
,并将其格式设置为仅包含该月。

是否有其他或更好的方法来执行此操作?

您可以使用以下方法返回包含月份名称的字符串数组

System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
您可以使用获取该信息:

// Will return January
string name = DateTimeFormatInfo.CurrentInfo.GetMonthName(1);
或获取所有名称:

string[] names = DateTimeFormatInfo.CurrentInfo.MonthNames;
您还可以基于
CultureInfo
实例化新的
DateTimeFormatInfo
,也可以使用当前区域性的属性

var dateFormatInfo = CultureInfo.GetCultureInfo("en-GB").DateTimeFormat;

请记住,.Net中的日历最多支持13个月,因此,对于只有12个月的日历(例如在en US或fr中找到的日历),您将在末尾获得一个额外的空字符串.

您可以从
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 );
}
string[]localizedMonths=Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNames;
字符串[]invariantMonths=DateTimeFormatInfo.InvariantInfo.MonthNames;
对于(整数月=0;月<12;月++)
{
ListItem monthListItem=新的ListItem(localizedMonths[月]、invariantMonths[月];
MonthDropdown.Items.Add(monthListItem);
}

根据日历类型的不同,一年中的月数可能会有一些问题,但在本例中,我假设为12个月。

尝试枚举月份名称:

for( int i = 1; i <= 12; i++ ){
  combo.Items.Add(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[i]);
}

for(inti=1;i它们在全球化名称空间中定义为数组

using System.Globalization;

for (int i = 0; i < 12; i++) {
   Console.WriteLine(CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]);
}
使用系统全球化;
对于(int i=0;i<12;i++){
Console.WriteLine(CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]);
}
List mnt=new List();
int monthCount=Convert.ToInt32(cbYear.Text)=DateTime.Now.Year?DateTime.Now.Month:12;
对于(int i=0;i
此方法允许您将月份的键值对列表应用于其
int
对应项。我们使用可枚举范围和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();
//
ddlMonths.DataSource=months;
ddlmounts.DataTextField=“M”;
ddlmounts.DataValueField=“I”;
ddl.DataBind();
公共数字月
{
得到
{
返回Enumerable.Range(1,12)。选择(x=>new SelectListItem
{
值=x.ToString(),
Text=DateTimeFormatInfo.CurrentInfo.GetMonthName(x)
});
}
}

使用LINQ检索动态区域性中特定月份名称列表的方法

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个月。

下面是一个很好的示例,用于在下拉列表中填写信用卡表单的月份:

    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.

一点林克只是因为它非常简洁:

var monthOptions = DateTimeFormatInfo.CurrentInfo.MonthNames
    .Where(p=>!string.IsNullOrEmpty(p))
    .Select((item, index) => new { Id = index + 1, Name = item });
您需要Where子句,因为日历返回第13个月的名称(英文为空)


索引返回IEnumerable中的索引,因此实际月份索引需要+1。

如何创建任意顺序的自定义月份名称列表

是的,我在回答一个十多年前的问题

然而,我想添加这个代码片段,希望它能帮助其他人。它展示了如何以任何自定义顺序输出月份名称列表。在我的例子中,我需要它在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)
        })
    }
};

当然,我会为一个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);

希望有人会觉得这很有用!

我是这样做的:(可以设置文化)


您可以使用linq轻松地执行以下操作,这样您的下拉列表中只有12项

var Months = new SelectList((DateTimeFormatInfo.CurrentInfo.MonthNames).Take(12));

出于某种原因,我抓取的代码使用ListItem.Value属性的不变名称。不确定原因,但您可能希望使用整数来代替。我使用CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName您的第二个示例无法编译。您需要创建
DateTimeFormatInfo
的新实例或调用其
G静态类中的etInstance()
方法。例如,
new DateTimeFormatInfo().MonthNames;
DateTimeFormatInfo.GetInstance().MonthNames
我已经纠正了注释中指出的问题(以后您可以编辑帖子).注意:我必须将答案与
Enumerable.Range
一起使用,因为
DateTimeFormatInfo.MonthNames
返回一个包含13个元素的数组,因此如果
。选择
,最后会得到一个空项。就像使用Enumerable.Range一样,我将使用它与MVC SelectListItemsup的列表一起使用
Where
>克劳斯:非常好,林克。谢谢!TakeWhile正是我需要的。:)
  "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 ....
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);
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
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);
var Months = new SelectList((DateTimeFormatInfo.CurrentInfo.MonthNames).Take(12));