2013-07-11 155 views
0

我试图用FileHelpers编写一个固定长度的文件。我有几个字段是可以为空值的日期时间。如果它们是空值,我需要它们为零填充(即“00000000”而不是日期)。我试过使用自定义字段转换器,但是问题是我需要这个日期以特定的格式。我可以实现使用零填充null日期时间和格式日期时间

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

格式,但后来我不能用我的客户领域转换。

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

回答

0

为了您的目的(写入文件),该字段是一个八位数字符串,因此请将其视为这样,并仅将日期转换用作产生八位数字符串的中间步骤。

因此,像这样(伪):

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

如果日期时间不为空,而是越来越被设置为'DateTime.MinValue'将它有意义做类似 'if(from.ToString()== DateTime.MinValue.ToString()) {return“00000000”; }' – TOlsen

+0

当然 - 处理你需要处理的任何边缘情况。我会添加一个例如'如果日期字段是DateTime.MinValue,然后返回“00000000”',但当然有不止一种方法来做到这一点。 – John

2

试试这个:

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;