2011-08-27 130 views
4

我有一個下拉列表中顯示的月份列表。在選擇一個特定的月份時,我想在文本框中顯示月份的編號。如何顯示選擇月份名稱的月份編號

例如,如果我選擇January我想將其顯示爲01,對於其他人也是如此。

這是示例代碼,我已經寫了:

string monthName = "january"; 
int i = DateTime.ParseExact(monthName, "MMMM", CultureInfo.CurrentCulture).Month; 

回答

13

使用此代碼轉換所選月份名稱爲月數

DateTime.ParseExact(monthName, "MMMM", CultureInfo.InvariantCulture).Month 

需要字符串填充?

PadleftMonthNumberString.PadLeft(2, "0") 

參考

示例控制檯應用程序

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string mnthname = "january"; 
      int i = DateTime.ParseExact(mnthname, "MMMM", System.Globalization.CultureInfo.InvariantCulture).Month; 
      Console.WriteLine(i.ToString()); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

我不會日期的權利,我將只獲得一個月的名稱從下拉菜單中按照你的答案我想給出適當的日期時間 – Vivekh

+0

在您的問題中不存在「時間」一詞。我沒有關注。您可以忽略在我的答案中使用DateTime的事實。這只是擁有ParseExact函數的類。 –

+0

那麼,我應該採取什麼,而不是DateTime – Vivekh

3

只是想湊合(?)對hamlin11的回答,您可以使用下拉的selectedIndex + 1

+0

同意,假設按時間順序排列,並存在所有12個月 –

+0

我認爲這可以作爲一個聲明而不是回答 – Dotnet

+0

這是我的不好,我當時沒有評論特權 – Schu

3

下面是一個不需要任何解析替代或使用索引繞過解析代碼下降。

將月份值列表創建爲月份文本,然後使用它創建一個字典以將文本映射到該值。像這樣:

var months = 
    from m in Enumerable.Range(1, 12) 
    select new 
    { 
     Value = m, 
     Text = (new DateTime(2011, m, 1)).ToString("MMMM"), 
    }; 

var list = months.Select(m => m.Text).ToArray(); 
var map = months.ToDictionary(m => m.Text, m => m.Value); 

現在下拉可以從list填充並選擇任何值可以被轉換回使用map值。

var month = map["January"]; 

這生成的文本,而不是解析它,所以它應該適用於任何文化。

0

使用下拉列表的索引是一個不錯的選擇。您還可以將字典綁定到下拉列表。創建包含月份名稱爲當前文化詞典:

var months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames.Select ((m, i) => 
    new { 
     Key = string.Format("{0,2}", i + 1), 
     Value = m, 
    }); 

隨着數據綁定:

ddl.DataSource = months; 
ddl.DataTextField = "Value"; 
ddl.DataValueField = "Key"; 
ddl.DataBind(); 
相關問題