【问题标题】:How to convert date string to specific date format?如何将日期字符串转换为特定的日期格式?
【发布时间】:2013-03-11 05:12:21
【问题描述】:

我从数据库中获取日期字符串值(3/13/2013 12:00:00AM),我需要像这种格式(yyyy-mm-dd)一样转换。请帮我解决这个问题。

string targetdate = "3/13/2013 12:00:00AM";(getting date value from DB)
DateTime lastdate = DateTime.ParseExact(targetdate, "yyyy-mm-dd", 
                  System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat);

我试过了

Iformatprovider = null. 

但我得到同样的错误“字符串未被识别为有效的日期时间

【问题讨论】:

    标签: asp.net c#-4.0


    【解决方案1】:

    我认为问题在于日期时间

    "3/13/2013 12:00:00AM"
    

    不应该是凌晨 12:00:00。

    应该是下午 12:00:00。

    示例

      string targetdate = "3/13/2013 11:59:59AM";
      DateTime lastdate = DateTime.ParseExact(targetdate,
                                   "M/d/yyyy HH:mm:sstt",
                                   System.Globalization.CultureInfo.InvariantCulture);
    
      lastdate=lastdate.AddSeconds(1);
    

    你会得到

      3/13/2013 12:00:00 AM
    

    我建议你把它放在数据库端。

    如果你使用的是 sql server 那么

    示例

    以下脚本使用 CONVERT() 函数来显示不同的格式。我们将使用 GETDATE() 函数来获取当前日期/时间:

    CONVERT(VARCHAR(19),GETDATE())
    CONVERT(VARCHAR(10),GETDATE(),10)
    CONVERT(VARCHAR(10),GETDATE(),110)
    CONVERT(VARCHAR(11),GETDATE(),6)
    CONVERT(VARCHAR(11),GETDATE(),106)
    CONVERT(VARCHAR(24),GETDATE(),113)
    

    结果如下所示:

    Nov 04 2011 11:45 PM
    11-04-11
    11-04-2011
    04 Nov 11
    04 Nov 2011
    04 Nov 2011 11:45:34:243 
    

    【讨论】:

      【解决方案2】:

      首先,您需要使用格式"M/d/yyyy HH:mm:sstt" 将日期字符串转换为DateTime 类型对象,稍后您可以使用"yyyy-MM-dd" 获取格式化字符串。 (你用小写m代表月份,它应该是大写M代表月份。

      string targetdate = "3/13/2013 12:00:00AM";
      DateTime lastdate = DateTime.ParseExact(targetdate, 
                             "M/d/yyyy hh:mm:sstt", 
                             System.Globalization.CultureInfo.InvariantCulture);
      
      string newFormat = lastdate.ToString("yyyy-MM-dd");
      

      newFormat 将包含"2013-03-13"

      【讨论】:

      • 在“DateTime lastdate”行中出现相同的错误(字符串未被识别为有效的日期时间)。我按照你说的做了。
      • @soundy,奇怪,一定是文化问题,试试编辑的代码,System.Globalization.CultureInfo.InvariantCulture作为DateTime.ParseExact的最后一个参数,应该可以。
      • @soundy,我只是在 Visual Studio 中测试了上面的代码,它工作正常,你确定你没有从其他地方传递 targetdate,因为这似乎改变了。在一个简单的控制台应用程序中尝试此代码,看看它是否有效。
      • targetdate 值直接从 DB(mysql) 中获取,例如 dt.Rows[0]["actual_target"].ToString().Trim() 但在 DB 中,值是这样的“2013-03- 13"。我不知道为什么会这样。请
      • @soundy,放一个断点,看看你传递给 DateTime.ParseExact 什么,你的值似乎与字符串不同,为什么你要从数据库中以字符串格式取回数据,可以得到DateTime类型对象中的数据
      【解决方案3】:

      如果您知道您拥有哪种日期时间格式以及转换哪种格式,那么在 .Net 中进行日期时间转换非常容易。 这是一个例子。

          String origionalDate = "12/20/2013"; // Format : MM/dd/yyyy
          string origionalFormat = "MM/dd/yyyy";
          string convertInToFormat="dd/MM/yyyy";
          String convertedDate;
          DateTime objDT;
      
          if (DateTime.TryParseExact(origionalDate, origionalFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out objDT) == true)
          {
              convertedDate = objDT.ToString(convertInToFormat);
              Response.Write("<b>Origional DateTime Format ( " + origionalFormat + " ) : </b>" + origionalDate);
              Response.Write("<br/>");
              Response.Write("<b>Converted DateTime Format ( " + convertInToFormat + " )  : </b>" + convertedDate);
          }
          else
          {
              Response.Write("<b>Not able to parse datetime.</b>");
          }
      

      有关此的更多详细信息,请访问此链接。 Click Here...

      【讨论】:

        猜你喜欢
        • 2018-08-30
        • 2021-06-10
        • 1970-01-01
        • 2014-09-12
        • 1970-01-01
        • 2013-12-28
        • 1970-01-01
        • 2020-08-10
        • 2015-07-13
        相关资源
        最近更新 更多