2011-08-27 131 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(); 
相关问题