【问题标题】:Convert.ToDateTime('Datestring') to required dd-MMM-yyyy format of dateConvert.ToDateTime('Datestring') 到所需的 dd-MMM-yyyy 日期格式
【发布时间】:2021-08-23 18:31:07
【问题描述】:

我正在尝试导出到 excel 我有日期字符串,它可以是任何日期格式,但我想将其转换为 dd-MMM-yyyy 格式。 我已经尝试了每个 Convert.ToDatetime 选项,它只转换为系统格式。我想让它转换 dd-MMM-yyyy 格式。

多谢提前。

List<UnavailableModel> collection = UnavailableBL.GetAllUnavailableDetails(FilteredFacetsJsonString).Result.ToList();
base.Warning(string.Format("Get {0} number of records ", collection.Count));
List<object> obj = new List<object>();
obj.Insert(0, new string[7] { "NAME", "REGION NAME", "MANAGER NAME", "FROM DATE", "TO DATE", "CATEGORY", "COMMENTS" });

int count = 1;
foreach (var audit in collection)
{
    DateTime? dt1 = null, dt2 = null;
    string StartDate = null, EndDate = null;
    if (audit.FromDate != null)
    {
        dt1 = Convert.ToDateTime(audit.FromDate);
        StartDate = dt1.ToString().Substring(0, 10);
    }
    if (audit.ToDate != null)
    {
        dt2 = Convert.ToDateTime(audit.ToDate);
        EndDate = dt2.ToString().Substring(0, 10);
    }
    obj.Insert(count, new string[7]{
        string.Format("\"{0}\"", audit.Region_Name),
        string.Format("\"{0}\"",  audit.First_Name+" 
        "+audit.Last_Name),
        string.Format("\"{0}\"", audit.Manager_First_Name+" "+audit.Manager_Last_Name),
        string.Format("\"{0}\"", StartDate),
        string.Format("\"{0}\"", EndDate),
        string.Format("\"{0}\"", audit.Category),
        string.Format("\"{0}\"", audit.Comments)
    });
    count++;
}
base.Warning(string.Format("Data table created "));


for (int i = 0; i < obj.Count; i++)
{
   string[] stringCSV = (string[])obj[i];
   for (int j = 0; j < stringCSV.Length; j++)
   {
       //Append data with separator.
       sb.Append(stringCSV[j] + ',');
   }

   //Append new line character.
   sb.Append("\r\n");

}

【问题讨论】:

  • 使用 DateTime.TryParseExact 代替 Convert.ToDateTime,为输入值传递可能格式的数组。此时,如果 TryParseExact 成功转换 DateTime 变量中的原始字符串,您可以在 TryParseExact 转换的日期上使用 ToString("dd-MMM-yyyy") 获取所需格式的字符串
  • 是这样吗?
  • 日期时间? dt1 = 空,dt2 = 空;字符串开始日期 = 空,结束日期 = 空; if (audit.FromDate != null) { dt1 = DateTime.TryParseExact(audit.FromDate.ToString(), "dd/MMM/yyyy",CultureInfo.InvariantCulture).ToString("dd/MMM/yyyy") ;开始日期 = dt1.ToString().Substring(0, 10); }
  • 重点是:audit.FromDate的类型是什么?如果它是一个字符串并且您无法控制该字符串的写入方式,那么您只能将 TryParseExact 与可能格式的数组一起使用。不完整,但你可以得到足够好的结果
  • 类型为DateTime格式

标签: c# datetime


【解决方案1】:

首先,DateTime 没有格式。它在内部存储为一个整数,表示自 0001 年 1 月 1 日以来的刻度数。 DateTime 仅在显示时“具有格式”。只有在它被转换为string 之后(无论是使用当前文化的默认格式,还是在调用ToString 时明确指定的格式)。

第二,这一行毫无意义:

dt1 = Convert.ToDateTime(audit.FromDate);`

由于FromDate已经DateTime,您需要做的就是直接分配它:

dt = audit.FromDate;

但是你把事情搞混了。您不能将格式化的日期(string)分配给DateTime 变量。将您的 Date 格式化为 string 并将其存储为 string 变量并将 that 传递给您的 Excel 构建方法:

string EndDate = audit.FromDate.ToString("dd-MMM-yyyy");

您的代码中绝对不需要 DateTime.ParseDateTime.TryParseDateTime.TryParseExactConvert.ToDateTime。您已经拥有所需的一切,而无需执行任何不必要的“转换”。

【讨论】:

    【解决方案2】:

    如果你手头有 DateTime,你可以将它写成 excel 中的字符串,如下所示:

    StartDate = dt1.ToString("dd-MMM-yyyy");
    

    然后使用该字符串输入excel。

    【讨论】:

    • 这不起作用,出现错误。 `日期时间? dt1 = 空,dt2 = 空;字符串开始日期 = 空,结束日期 = 空; if (audit.FromDate != null) { dt1 = Convert.ToDateTime(audit.FromDate); StartDate = dt1.ToString("dd-MMM-yyyy"); } `
    • 使用 DateTime.TryParse 进行转换。并请分享错误信息。
    • 是这样吗?约会时间? dt1 = 空,dt2 = 空;字符串开始日期 = 空,结束日期 = 空; if (audit.FromDate != null) { dt1 = DateTime.TryParseExact(audit.FromDate.ToString(), "dd/MMM/yyyy",CultureInfo.InvariantCulture).ToString("dd/MMM/yyyy") ;开始日期 = dt1.ToString().Substring(0, 10); }
    【解决方案3】:

    只是对Afshin's 实用解决方案进行一些扩展。关于这个问题有不少resourcesandquestions。通常,当从对象格式化字符串时,ToString 方法是您的朋友。在日期的情况下,您可以将您想要的custom format 作为字符串传递:

    StartDate = dt1.ToString("dd-MMM-yyyy");
    

    请记住,在处理外部资源时,使用DateTime.TryParse 通常更安全。这里有一些关于这个主题的guidance

    【讨论】:

    • 这不起作用,出现错误。 `日期时间? dt1 = 空,dt2 = 空;字符串开始日期 = 空,结束日期 = 空; if (audit.FromDate != null) { dt1 = Convert.ToDateTime(audit.FromDate); StartDate = dt1.ToString("dd-MMM-yyyy"); } `
    • @KondaReddy 因为日期没有格式。它只有一种格式显示时(转换为字符串)。您也不能像在评论中尝试那样将字符串分配回日期变量。如果您希望它以特定格式输出,请使用“ToString”此时。但是如果使用excel将值设置为日期对象作为日期然后设置单元格格式而不是
    猜你喜欢
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多