CSV助手写空字符串而不是默认的DateTime

发布于 2025-02-04 15:48:50 字数 1344 浏览 3 评论 0原文

嗨,我在使用CSVHELPER上在CSV文件上编写默认DateTime列时面临问题 我在做的是

  using (var memoryStream = new MemoryStream())
            {
                using (var streamWriter = new StreamWriter(memoryStream))
                {
                    using (var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture))
                    {
                        if (!string.IsNullOrEmpty(header))
                        {
                            csvWriter.WriteField(header);
                            csvWriter.NextRecord();
                        }
                        csvWriter.Configuration.TypeConverterOptionsCache.GetOptions<DateTime>().Formats = new[] { "dd/MM/yyyy" };
                        csvWriter.Configuration.TypeConverterOptionsCache.GetOptions<DateTime?>().Formats = new[] { "" };
                        csvWriter.Configuration.RegisterClassMap<TMap>();
                        csvWriter.WriteRecords(records);
                        WriteGrandTotals(columnTotals, csvWriter);
                    }
                }

                return memoryStream.ToArray();
            }

结果

我在DB中有默认的日期时间 而不是这个误导数据

Hi I am facing an issue while writing default DateTime column on CSV file using csvHelper
What I am doing is

  using (var memoryStream = new MemoryStream())
            {
                using (var streamWriter = new StreamWriter(memoryStream))
                {
                    using (var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture))
                    {
                        if (!string.IsNullOrEmpty(header))
                        {
                            csvWriter.WriteField(header);
                            csvWriter.NextRecord();
                        }
                        csvWriter.Configuration.TypeConverterOptionsCache.GetOptions<DateTime>().Formats = new[] { "dd/MM/yyyy" };
                        csvWriter.Configuration.TypeConverterOptionsCache.GetOptions<DateTime?>().Formats = new[] { "" };
                        csvWriter.Configuration.RegisterClassMap<TMap>();
                        csvWriter.WriteRecords(records);
                        WriteGrandTotals(columnTotals, csvWriter);
                    }
                }

                return memoryStream.ToArray();
            }

the results
enter image description here

I have default DateTime in Db I want this default DateTime to be a null or empty string in the CSV column
instead of this misleading data

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2025-02-11 15:48:50

您不需要此处的类型转换。您需要的行为已经存在:

using System.Collections;
using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration.Attributes;

var records = new List<TMap>
{
    new TMap { Id = 1, Stamp = DateTime.Now, Filer = "X"},
    new TMap { Id = 2, Stamp = null, Filer = "X" },
    new TMap { Id = 3, Stamp = DateTime.Now, Filer = "X" },
};

using (var writer = new StreamWriter("file.csv"))
{
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    {
        csv.WriteRecords((IEnumerable)records);
    }
}

class TMap
{
    public int Id { get; set; }

    [Format("dd/MM/yyyy")]
    public DateTime? Stamp { get; set; }
    
    public string Filer { get; set; }
}

结果:

Id,Stamp,Filer
1,06/06/2022,X
2,,X
3,06/06/2022,X

You don't need type conversion here. The behavior you need is already there:

using System.Collections;
using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration.Attributes;

var records = new List<TMap>
{
    new TMap { Id = 1, Stamp = DateTime.Now, Filer = "X"},
    new TMap { Id = 2, Stamp = null, Filer = "X" },
    new TMap { Id = 3, Stamp = DateTime.Now, Filer = "X" },
};

using (var writer = new StreamWriter("file.csv"))
{
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    {
        csv.WriteRecords((IEnumerable)records);
    }
}

class TMap
{
    public int Id { get; set; }

    [Format("dd/MM/yyyy")]
    public DateTime? Stamp { get; set; }
    
    public string Filer { get; set; }
}

Result:

Id,Stamp,Filer
1,06/06/2022,X
2,,X
3,06/06/2022,X
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文