【问题标题】:C# DateTime format in Arrays数组中的 C# DateTime 格式
【发布时间】:2017-03-29 02:52:31
【问题描述】:

目前我的函数输出日期为 6/6/2016,我需要能够将所有数据设为 06/06/2016。我发现 DateTime.Now.ToString("dd") 是一个解决方案。但是当我做parts[0].DateTime.Now.ToString("dd") 它不接受它。

private static string FormatDate(string sDate)
{
    // "6/16/1989"
    //mysql format 06-16-1989

    string[] parts = sDate.Split('/');

    //sDay.DateTime.Now.ToString("dd");

    return $"'{parts[2]}-{parts[1]}-{parts[0]}'";
}

【问题讨论】:

  • Parts 不是日期时间对象。您希望 DateTime.ParseExact(sDate, "MM/dd/yyyy", System.Globalization.CultureInfo.CurrentCulture); 将日期作为 C# datetime 对象获取。如果您使用的是 MySQL,那么您应该使用 .NET MySQL 驱动程序和parameterized queries(以防止 SQL 注入)。我不确定您为什么需要以纯文本格式处理日期。
  • 我添加了一个正确的 ParseExact 示例的答案。

标签: c# format-string


【解决方案1】:

我猜你要找的是这个:

string sDate = "6/16/1989";
Console.WriteLine(Convert.ToDateTime(sDate).ToString("MM-dd-yyyy"));

输出是这样的:

06-16-1989

希望对你有帮助!

【讨论】:

    【解决方案2】:

    试试这个

    private static string FormatDate(string sDate)
    {
        // "6/16/1989"
        //mysql format 06-16-1989
        DateTime date;
        if (!DateTime.TryParseExact(sDate, new string[] { "MM/dd/yyyy", "M/dd/yyyy", "MM/d/yyyy" }, System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.AdjustToUniversal, out date))
        {
            return string.Empty;
        }
        return date.ToString("MM-dd-yyyy");
    }
    

    如果您只想使用标准 TryParse,这也可以:

    private static string FormatDate(string sDate)
    {
        // "6/16/1989"
        //mysql format 06-16-1989
        var usCultureInfo = System.Globalization.CultureInfo.GetCultureInfo(0x0409);
        DateTime date;
        if (!DateTime.TryParse(sDate, usCultureInfo, System.Globalization.DateTimeStyles.AdjustToUniversal, out date))
        {
            return string.Empty;
        }
        return date.ToString("MM-dd-yyyy");
    }
    

    请注意,当无法理解日期时,这些示例将返回一个空字符串。

    但请考虑使用 MySQL 驱动程序和参数化查询,因为这将使您的代码更安全且更易于使用。

    【讨论】:

    • 它不工作。所以我做了这个解决方案,它奏效了
    • private static string FormatDate(string sDate) { // "6/16/1989" //mysql 格式 yyyy-mm-dd => 1989-06-16 string[] parts = sDate.Split ('/');字符串 mm = 零件[1]; if (mm.Length
    【解决方案3】:

    您可以使用 DateTime.ParseExact() 这将 通过抛出异常告诉你传入的值何时没有正确的格式。一个例子是

    string sDate = "6/6/2016";
    
            try
            {
                DateTime dt = DateTime.ParseExact(sDate, "d/M/yyyy", CultureInfo.InvariantCulture);
    
                Console.WriteLine(dt.ToString("yyyy-MM-dd"));
            }
            catch (Exception e) {
    
                Console.WriteLine(e.Message);
            }
    

    【讨论】:

      【解决方案4】:

      首先,您可以通过以下方式将字符串解析为 DateTime:

      var dt = DateTime.Parse(sDate);
      

      然后你可以使用 DateTime.ToString 格式化方法,例如:

      dt.ToString("MM-dd-yyyy");
      

      或者:

      return dt.ToString("MM") + "-" + dt.ToString("dd") + "-" dt.ToString("yy");
      

      【讨论】:

      • 你必须使用 ParseExact 因为日期是特定格式的。考虑英国格式 dd/MM/yyyy。是 1 月 3 日还是 3 月 1 日?
      • 谢谢。是的,我需要先获得年份,这就是我将它们作为零件制作的原因。这没有用:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多