如何在选择月份名称时显示月份数字

本文关键字:显示 数字 选择 | 更新日期: 2023-09-27 18:06:52

我有一个下拉列表显示月份。在选择特定月份时,我想在文本框中显示月份的数字。

例如,如果我选择January,我希望将其显示为01,其他的也一样。

这是我写的示例代码:

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

如何在选择月份名称时显示月份数字

使用以下代码将选定的月份名称转换为月份编号

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

需要字符串填充吗?

PadleftMonthNumberString.PadLeft(2, "0")

引用

  • 如何解析一个月的名称(字符串)到一个整数比较在c# ?
  • PadLeft
  • DateTime。ParseExact

控制台应用程序示例

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();
        }
    }
}

只是试图即兴(?)hamlin11的答案,您可以通过使用下拉菜单的selecteindex +1

绕过解析代码

这里有一个替代方法,它不需要任何解析或使用下拉列表的索引。

创建一个月值到月文本的列表,然后使用它创建一个字典,将文本映射到值。这样的:

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"];

生成文本而不是解析文本,因此它应该适用于任何文化。

使用下拉列表的索引是一个不错的选择。您还可以将字典绑定到下拉列表。创建包含当前区域性月份名称的字典:

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();