Нулевое заполнение нулевых datetime и форматирование datetime

Я пытаюсь написать файл фиксированной длины с FileHelpers. Некоторые из полей, которые у меня есть, являются datetime, которые могут быть нулевыми значениями. Если они являются нулевыми значениями, мне нужно, чтобы они были заполнены нулями (то есть "00000000" вместо даты). Я пытался использовать пользовательский конвертер полей,

public class CustomDateConverter : ConverterBase
{
    public override object StringToField(string from)
    {
        if (from == null)
        {
            return string.Empty;
        }
        return from;
    }
}

но проблема в том, что мне нужна эта дата в определенном формате. Я могу достичь формата с помощью

[FieldConverter(ConverterKind.Date, "MMddyyyy")]

Но тогда я не могу использовать свой конвертер клиентов.

Может кто-нибудь подсказать мне, как мне выполнить преобразование формата и обнуление, заполнив нулевые значения, которые я могу получить?

2 ответа

Решение

Для ваших целей (написание файла) поле представляет собой строку из восьми цифр, поэтому рассматривайте ее как таковую и используйте преобразования даты только в качестве промежуточного шага для создания строки из восьми цифр.

Так что-то вроде этого (псевдокод):

if date field is null
{
    return "00000000"
}
else
{
    return string of date formatted as "MMddyyyy"
}

Попробуй это:

public class CustomDateConverter : ConverterBase
{
    public override object StringToField(string stringValue)
    {
        if (string.IsNullOrEmpty(stringValue) || stringValue == "00000000")
        {
            return null;
        }

        return Convert.ToDateTime(stringValue);
    }

    public override string FieldToString(object fieldValue)
    {
        return fieldValue == null ? "00000000" : ((DateTime)fieldValue).ToString("MMddyyyy");
    }
}

[FieldConverter(typeof(CustomDateConverter))]
public DateTime? MyDate;
Другие вопросы по тегам