【问题标题】:CONVERT date format from mm-dd-yyyy to dd-mmm-yyyy in c#在c#中将日期格式从mm-dd-yyyy转换为dd-mmm-yyyy
【发布时间】:2014-01-16 06:58:34
【问题描述】:

我正在尝试将 asp.net 表单字段值插入到 oracle 数据库表中。我有一个“MM-DD-YYYY”格式的日期字段。我需要将该日期添加到 oracle 表中。所以我试图将该日期格式转换为“DD-MMM-YYYY”格式。但我收到以下错误。

代码:

var creation_date = DateTime.ParseExact(CreationDateTextBox.Text, "DD-MMM-YYYY",null);

文本框值为:12-12-2013。(没有时间) 我收到类似“字符串未被识别为有效日期时间”之类的错误。

【问题讨论】:

  • 你试过检查互联网上的链接吗???
  • 你被Skeet'd。 :)
  • 试试DateTime.ParseExact("12-dec-2013", "dd-MMM-yyyy",null)
  • A DateTime 没有格式。这基本上是一个花哨的Int64 计数滴答声。因此,您不能将DateTime 从一种格式“转换”为另一种格式。您可以“转换”(即解析)String 以获得DateTime。但要做到这一点,您需要告诉 parse 方法您正在解析 fromString 的格式。在这种情况下:"MM-dd-yyyy"。然后,如果您想显示该抽象的刻度数,请将其转换回您喜欢的人类可读形式:date.ToString("dd-MMM-yyyy")。但是将其放入数据库应该需要。

标签: c# asp.net date


【解决方案1】:

您需要使用MM-dd-yyyy 解析日期,但您根本不需要格式化它。只需使用参数化 SQL 将其作为DateTime 传递给数据库。

DateTime creationDate;
if (DateTime.TryParseExact(CreationDateTextBox.Text, "MM-dd-yyyy",
                           CultureInfo.InvariantCulture, DateTimeStyles.None,
                           out creationDate))
{
    // Use creationDate within a database command, but *don't* convert it
    // back to a string.
}
else
{
    // Handle invalid input
}

尽可能避免字符串转换。实际上,理想情况下,最好使用一些描述的日期/时间选择器,而不仅仅是一个文本字段 - 这将为用户提供更好的体验并降低转化不良的风险。

另请注意,无论何时您要使用自定义字符串转换(解析或格式化),都应阅读 MSDN docs - YYYYDD 不是有效的格式说明符。

【讨论】:

  • OP 似乎在做日月年,而不是月日年,尽管很难确定 2013 年 12 月 12 日。
  • @paqogomez:不,“我有一个“MM-DD-YYYY”格式的日期字段。” (看看标题。)他们在当前代码中搞错了。
  • 我不应该怀疑。
【解决方案2】:

这可能会有所帮助:)

String myString = "12-30-2014"; // get value from text field
DateTime myDateTime = new DateTime();
myDateTime = DateTime.ParseExact(myString, "MM-dd-yyyy",null);
String myString_new = myDateTime.ToString("dd-MM-yyyy"); // add myString_new to oracle

【讨论】:

    【解决方案3】:

    试试这个

    DateTime dt = Convert.ToDateTime(CreationDateTextBox.Text);
    var creation_date=String.Format("{0:dd-MMM-yyyy}", dt)
    

    或者试试

     dt.ToString("dd MMM yyyy"); 
    

    【讨论】:

    • 为什么要使用复合字符串格式而不是只调用dt.ToString("...")?并不是说我认为无论如何使用格式是个好主意...
    • @JonSkeet 我同意你的看法,但据我所知,你不能使用 DateTime 打印MMM
    • 你绝对可以,但这与使用 ToStringString.Format 完全不相关——再说一次,我根本不会格式化值。
    【解决方案4】:

    您有 3 个 M 表示月份,用于月份名称。只需使用两个 M。

    【讨论】:

    • @SandeepReddyK。它与您需要的格式无关,它与您在文本框中的格式有关。 datetime 对象没有格式,打印出来时给它一个格式。罗兰的回答是正确的。
    • 虽然 OP 确实 需要两个 Ms,但他们还需要以其他方式更改其格式 - DDYYYY 不是有效的自定义格式说明符,并且指定输入格式的排序不正确。然后OP询问了如何格式化结果,这个答案没有提到。
    【解决方案5】:
        private DateTime ConvertToDateTime(string strDateTime)
        {
            DateTime dtFinaldate; string sDateTime;
            try { dtFinaldate = Convert.ToDateTime(strDateTime); }
            catch (Exception e)
            {
                string[] sDate = strDateTime.Split('/');
                sDateTime = sDate[1] + '/' + sDate[0] + '/' + sDate[2];
                dtFinaldate = Convert.ToDateTime(sDateTime);
            }
            return dtFinaldate;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      相关资源
      最近更新 更多