【问题标题】:Zero filling null datetimes and formatting datetime零填充空日期时间和格式化日期时间
【发布时间】:2016-02-05 21:15:50
【问题描述】:

我正在尝试使用 FileHelpers 编写一个固定长度的文件。我拥有的一些字段是可以为空值的日期时间。如果它们是空值,我需要将它们填充为零(即“00000000”而不是日期)。我尝试使用自定义字段转换器,

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

但问题是我需要特定格式的日期。我可以使用

实现格式
[FieldConverter(ConverterKind.Date, "MMddyyyy")]

但是我不能使用我的客户字段转换器。

有人可以直接指导我如何完成格式转换和零填充我可能得到的空值吗?

【问题讨论】:

    标签: c# datetime filehelpers fixed-length-record


    【解决方案1】:

    试试这个:

    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;
    

    【讨论】:

      【解决方案2】:

      出于您的目的(写入文件),该字段是一个八位字符串,因此请按此处理,并且仅将日期转换用作生成八位字符串的中间步骤。

      类似这样的东西(伪代码):

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

      【讨论】:

      • 如果日期时间不为空,而是设置为DateTime.MinValue,那么执行if (from.ToString() == DateTime.MinValue.ToString()) { return "00000000"; }之类的操作是否有意义
      • 当然——处理你需要处理的任何边缘情况。我会添加一个类似if date field is DateTime.MinValue then return "00000000" 的案例,但当然有不止一种方法可以做到这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多