【问题标题】:How to output dates into CSV file in DD/MM/YYYY format instead of DD/MM/YYYY HH:MM:SS如何以 DD/MM/YYYY 格式而不是 DD/MM/YYYY HH:MM:SS 将日期输出到 CSV 文件中
【发布时间】:2019-06-26 19:20:31
【问题描述】:

这里的非开发人员试图清除日期格式。正在检查承包商创建的 C# 代码。

这是用于将 JSON 对象转换为 CSV 格式的新代码。承包商使用了 Newtonsoft 和 Newtonsoft.Linq,还有一个 CSVhelper 函数正在使用。

string webData = System.Text.Encoding.UTF8.GetString(raw);

var records = JsonConvert.DeserializeObject<IList<JournalImport>>(webData, new Newtonsoft.Json.Converters.IsoDateTimeConverter { DateTimeFormat = "dd/MM/yyyy" });

using (var writer = new System.IO.StreamWriter(journalsCsvSFD.OpenFile()))
using (var csv = new CsvHelper.CsvWriter(writer))

我当前的 CSV 输出“26/06/2019 12:18:56”。

想要“26/06/2019”的预期结果

【问题讨论】:

  • 给定您的代码,我不知道在哪里执行此操作,但不是直接输出输出字符串(类似于outfile.Write(outputString);),我认为您可能可以使用类似 `outfile.写(outputstring.Split(' ')[0]);

标签: c# excel csv json.net csvhelper


【解决方案1】:

您可以添加格式选项。

using (var writer = new System.IO.StreamWriter(journalsCsvSFD.OpenFile()))
using (var csv = new CsvHelper.CsvWriter(writer))
{
    csv.Configuration.TypeConverterOptionsCache.GetOptions<DateTime>().Formats = new[] { "dd/MM/yyyy" };
    csv.WriteRecords(records);
}

【讨论】:

    【解决方案2】:

    让 Excel 在导入时正确设置格式是很挑剔的。你可以告诉它做一件事,它会做一些完全不同的事情。无论如何,突出显示整个时间列,右键单击->格式化单元格。在“数字”选项卡下,不要转到“时间”类别,而是尝试转到“自定义”类别,我认为您将能够找到您要查找的内容。

    【讨论】:

      【解决方案3】:

      CsvHelper 允许您创建自定义类型转换器。因此,您可以为 DateTime 执行此操作并根据需要对其进行格式化。

      void Main()
      {
          string webData = "[{\"date\":\"01/01/2018\",\"name\":\"toto\"}]";
          var records = JsonConvert.DeserializeObject<IList<JournalImport>>(webData, new Newtonsoft.Json.Converters.IsoDateTimeConverter { DateTimeFormat = "dd/MM/yyyy" });
          using (var writer = new System.IO.StreamWriter(File.Create(@"toto.csv")))
          using (var csv = new CsvHelper.CsvWriter(writer))
          {
              csv.Configuration.TypeConverterCache.AddConverter<DateTime>(new DateTimeCOnverter());
              csv.WriteRecords(records);
          }
      }
      
      public class JournalImport
      {
          public DateTime Date { get; set; }
          public string Name { get; set; }
      }
      
      public class DateTimeCOnverter : ITypeConverter
      {
          public object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
          {
              throw new NotImplementedException();
          }
      
          public string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
          {
              if (value is DateTime date)
              {
                  return date.ToString("dd/MM/yyyy");
              }
              return value?.ToString();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-01-02
        • 1970-01-01
        • 2013-11-01
        • 2015-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-07
        • 1970-01-01
        相关资源
        最近更新 更多