目前我正在爲每個月創建一個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. PHP如何列出所選月份的所有日總收益
- 3. 如何按月包括所有月份?
- 4. (Django)如何獲取月份名稱?
- 5. iOS:我如何指定月份名稱?
- 6. 如何在Apache Ignite 2.1中的一個緩存中列出所有緩存名稱和所有列名稱?
- 7. 如何將月份數字轉換爲月份短名稱?
- 8. 如何顯示選擇月份名稱的月份編號
- 9. 如何在SQL Server中列出所有需要的月份?
- 10. 月份名稱到月份編號 - 03月份是2月份?
- 11. 月份名稱2008
- 12. 月份數到月份名稱
- 13. 如何獲得唯一的月份和年份組合?
- 14. 如何打印拼寫出月份名稱而不是數字
- 15. 如何在javascript中使用Intl獲取月份名稱列表
- 16. 如何獲得一個數組列表的所有組合?
- 17. 如何使用moment.js列出2個日期之間的所有月份?
- 18. MySQL列中的月份名稱
- 19. PostgreSQL 9.3:生成月份名稱列表
- 20. 如何獲得當月之後的月份名稱?
- 21. 如何刪除列表中的所有實例名稱?
- 22. 如何使用Javascript返回一個月份名稱,如果功能
- 23. 如何在JTCalendar中獲取年份的月份名稱?
- 24. 具有月份名稱的Gnuplot X軸
- 25. DataAnnotation顯示月份名稱
- 26. SQL組通過列出每個名稱的所有值
- 27. 列出所有列元素名稱
- 28. 如何將datetimepicker值自動設置爲所選月份的第一個月份?
- 29. DateTime ToString不使用所有格的月份名稱
- 30. 跳過縮寫月份名稱爲月
你的第二個例子不會編譯。您需要創建一個新的DateTimeFormatInfo實例或從靜態類中調用它的GetInstance()方法。 `新的DateTimeFormatInfo()。MonthNames;`或`DateTimeFormatInfo.GetInstance()。MonthNames` – 2012-12-22 02:01:51
我已更正評論中註釋的問題(將來您可以編輯帖子)。 – user7116 2013-06-12 13:28:23