代码之家  ›  专栏  ›  技术社区  ›  Blerta

指定日期输入格式

  •  2
  • Blerta  · 技术社区  · 15 年前

    我有一个用于日期输入的ASP.NET文本框,我使用正则表达式让用户以dd-mm-yyyy格式输入日期,但是当我在datetime对象中转换输入日期时,月份和日期值会互换。 如何指定正确的方式来解释此输入日期?

    5 回复  |  直到 15 年前
        1
  •  1
  •   David    15 年前

    你可以使用 DateTime.ParseExact

        2
  •  1
  •   Aaron Daniels    15 年前

    您可以通过指定使用dd-mm-yyyy格式(如德国)的区域性来完成此操作:

    DateTime dateTime = DateTime.Parse("01-12-2009", CultureInfo.GetCultureInfo("de-DE"));
    Console.WriteLine(dateTime.ToString("dd MMM yyyy"));
    

    生产:

    01 Dec 2009
    

    当然,您确实希望在用户的文化中执行所有特定于文化的处理。所以, CultureInfo.GetCultureInfo("de-DE") 应该是 CultureInfo.CurrentCulture .

    如果您的用户不习惯看到像dd-mm-yyyy这样的日期,那么就不要使用这种格式。

        3
  •  1
  •   Tadas Å ukys    15 年前

    我建议使用 DateTime.TryParseExact() 并指定日期格式。

        4
  •  0
  •   Nick Clarke    15 年前

    我以前用过datetime.parse()。

    但听起来你有文化问题,所以这种方法可能更好:

      // Parse a date and time with no styles.
      dateString = "03/01/2009 10:00 AM";
      culture = CultureInfo.CreateSpecificCulture("en-US");
      styles = DateTimeStyles.None;
      try
      {
         result = DateTime.Parse(dateString, culture, styles);
         outputBlock.Text += String.Format("{0} converted to {1} {2}.",
                           dateString, result, result.Kind.ToString()) + "\n";
      }
      catch (FormatException)
      {
         //Error
      }
    

    有关msdn的详细信息: http://msdn.microsoft.com/en-us/library/ey1cdcx8(VS.96).aspx

    但是,如果这样做效果更好,您也可以建立起日期时间:

    DateTime d = new DateTime(Y, M, D);
    
        5
  •  0
  •   RichardOD    15 年前

    听起来这个应用程序运行的文化与你期望的用户输入不同。你可能想 change the culture 去你期待的那个。