目前我正在为每个月创建一个DateTime
并将其格式化为只包含月份。
有没有其他的或更好的方法来做到这一点?如何列出所有月份名称,例如一个组合?
回答
可以使用DateTimeFormatInfo
来获取信息:
// Will return January
string name = DateTimeFormatInfo.CurrentInfo.GetMonthName(1);
或获得所有名称:
string[] names = DateTimeFormatInfo.CurrentInfo.MonthNames;
您也可以实例化一个新DateTimeFormatInfo
BA请致电CultureInfo
与DateTimeFormatInfo.GetInstance
,或者您可以使用当前区域的CultureInfo.DateTimeFormat
属性。
请记住,.Net中的日历支持长达13个月,因此您将在仅有12个月的日历(例如在en-US或fr中找到的日历)的末尾获得额外的空字符串。
您可以使用下面的返回字符串数组包含月份名称
System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
您可以从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个月,这个例子。
出于某种原因,我抓取的代码使用了ListItem.Value属性的Invariant名称。不知道为什么,但你可能想用一个整数来代替。 – Greg 2008-11-24 20:26:57
尝试列举月份名称:
for(int i = 1; i <= 12; i++){
combo.Items.Add(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[i]);
}
这是System.Globalization命名空间中。
希望有帮助!
我使用CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName – 2011-11-02 09:49:21
它们被定义为全局化名称空间中的一个数组。
using System.Globalization;
for (int i = 0; i < 12; i++) {
Console.WriteLine(CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]);
}
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;
这个方法可以让你月键值对列表应用到他们的INT同行。我们使用Enumerable Ranges和LINQ使用单行生成它。 Hooray,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();
public IEnumerable<SelectListItem> Months
{
get
{
return Enumerable.Range(1, 12).Select(x => new SelectListItem
{
Value = x.ToString(),
Text = DateTimeFormatInfo.CurrentInfo.GetMonthName(x)
});
}
}
检索月份名称的动态文化具体名单在C#与LINQ的一种方式。
ComboBoxName.ItemsSource=
System.Globalization.CultureInfo.
CurrentCulture.DateTimeFormat.MonthNames.
TakeWhile(m => m != String.Empty).ToList();
OR
在这个例子中一个匿名对象与月份和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个月。
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;
这里是填充下拉列表以月为信用卡形式的一个很好的例子:
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.
有点LINQ只是因为它非常简洁:
var monthOptions = DateTimeFormatInfo.CurrentInfo.MonthNames
.Where(p=>!string.IsNullOrEmpty(p))
.Select((item, index) => new { Id = index + 1, Name = item });
您需要Where子句,因为日历返回第13个月的名称(英文为空)。
该索引返回IEnumerable内的索引,因此您需要为实际月份索引+1。
- 1. 如何在Oracle报告中显示所有月份名称?
- 2. 如何月份名称数组转换为数字阵列
- 3. PHP如何列出所选月份的所有日总收益
- 4. 如何将月份的名称添加到一组文件中
- 5. 月份名称
- 6. 如何列出TCL实例中的所有名称空间?
- 7. 如何按月包括所有月份?
- 8. iOS:我如何指定月份名称?
- 9. 如何获取月份名称
- 10. (Django)如何获取月份名称?
- 11. 如何通过月份名称
- 12. 如何在sql server 2008中按月份获取月份名称?
- 13. 如何将月份数字转换为月份短名称?
- 14. 如何将月份名称转换为月份编号
- 15. 如何从月份号码显示月份名称
- 16. 如何显示选择月份名称的月份编号
- 17. 如何从月份数中获取月份名称
- 18. 如何在Apache Ignite 2.1中的一个缓存中列出所有缓存名称和所有列名称?
- 19. 如何为月份名称指定一个数字 - Robot Framework
- 20. 如何在SQL Server中列出所有需要的月份?
- 21. 月份名称到月份编号 - 03月份是2月份?
- 22. 月份名称2008
- 23. 短月份名称
- 24. SQL Date_Format月份数到月份名称
- 25. 月份数到月份名称
- 26. Rexeg将月份名称和数字合并为一个
- 27. 如何从jquery datepicker列出一个月内的所有日期?
- 28. 如何获得唯一的月份和年份组合?
- 29. 如何编写一个bash别名来列出所有名称匹配env-vars
- 30. 如何打印拼写出月份名称而不是数字
你的第二个例子不会编译。您需要创建一个新的DateTimeFormatInfo实例或从静态类中调用它的GetInstance()方法。 `新的DateTimeFormatInfo()。MonthNames;`或`DateTimeFormatInfo.GetInstance()。MonthNames` – 2012-12-22 02:01:51
我已更正评论中注释的问题(将来您可以编辑帖子)。 – user7116 2013-06-12 13:28:23