Различное поведение форматирования CSVWriterC#

Место общения программистов C#
Ответить
Anonymous
 Различное поведение форматирования CSVWriter

Сообщение Anonymous »

Это было тяжело /запутанно, потому что есть пара движущихся частей:

Я хотел бы установить формат для всех дат в файле CSV, созданном CSVHelper CSVWriter. В приложении .NET Core (.NET 7.0, C# V11, CSVHELPER V30.0.1) я смог поместить < /p>

Код: Выделить всё

    // Add default format for nullable and non-nullable dates
var csvContext = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
csvContext.TypeConverterOptionsCache.GetOptions().Formats = new[] { "yyyy-MM-dd" };
csvContext.TypeConverterOptionsCache.GetOptions().Formats = new[] { "yyyy-MM-dd" };
В классе Map , прежде чем вызовать Automap . Это дало мне желаемый результат «2016-03-22», например. + 30.0.1 - я попробовал оба), и он работает непоследовательно, варьируясь в зависимости от строки формата. Если я укажу строку формата «yyyy-mm-dd», она не удастся, выводя исходный формат, но если я укажу «yyyy = mm-dd», он работает, создавая ожидаемый, но неправильный вывод '2016 = 03 -22 '. Кажется, одна строка формата работает, а другая - нет. HUNH?

Код: Выделить всё

    public static void Main()
{
var fileBytes = Array.Empty();
var data = new List {
new Foo{Id=987654, Name="Smith, John", Birthdate=DateTime.Parse("3/22/1972"),EntryDate=DateTime.Parse("8/26/2024") },
new Foo{Id=654321, Name="Doe, Jane", Birthdate=DateTime.Parse("8/29/1963"),EntryDate=DateTime.Parse("8/26/2024") }
};
var csvConfiguration = new CsvConfiguration(CultureInfo.CurrentCulture);

using (var memoryStream = new MemoryStream())
{
using (var streamWriter = new StreamWriter(memoryStream))
{
using (var csvWriter = new CsvWriter(streamWriter, csvConfiguration))
{
csvWriter.Context.RegisterClassMap(new FooMap());
csvWriter.WriteRecords(data);
}
}
fileBytes = memoryStream.ToArray();
}
HttpContext current = HttpContext.Current;
current.Trace.IsEnabled = false;
current.Response.Clear();
current.Response.ContentType = "application/octet-stream"; // or application/force-download
current.Response.AddHeader("content-disposition", "attachment;    filename=SelectedRecords.csv");
current.Response.BinaryWrite(fileBytes);
current.Response.End();

}

public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime? Birthdate { get; set; }
public DateTime? WithdrawDate { get; set; }
public DateTime? EntryDate { get; set; }
}

public class FooMap : ClassMap
{
public FooMap()
{
var csvContext = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
// Works: the undesired format is successfully applied
// Comment these two lines out and uncomment the following lines.
// The output is '3/22/1972' - the original value with no addt'l formatting
csvContext.TypeConverterOptionsCache.GetOptions().Formats = new[] { "yyyy#MM-dd" };
csvContext.TypeConverterOptionsCache.GetOptions().Formats = new[] { "yyyy#MM-dd" };
//csvContext.TypeConverterOptionsCache.GetOptions().Formats = new[] { "yyyy-MM-dd" };
//csvContext.TypeConverterOptionsCache.GetOptions().Formats = new[] { "yyyy-MM-dd" };

AutoMap(csvContext);
}
}
nb: формат, который я ищу>

Подробнее здесь: https://stackoverflow.com/questions/794 ... formatting
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»