我应该如何在Crystal Reports中显示这个显然过时的日期?

时间:2013-02-21 19:18:14

标签: date crystal-reports formatting crystal-reports-xi

我有一个字符串字段,其中日期有时输入为YYYY-MM-DD,并将其作为日期显示在Crystal Report上。我正在使用

DateValue ({Table.Field})

显示日期,然后将日期格式设置为MM / DD / YYYY。看起来很好,直到我看到1931年12月12日的日期,并且看到它与数据库中的内容不匹配:“0010-12-31”。

我知道这只是一个错字,我可以看到日期可能应该是12/31/2010,但我想显示他们输入的内容。所以,就在这个时候,我提出了以下内容:

if {Table.Field} = '0010-12-31' then
  Date(0010, 12, 31)
else
  DateValue ({Table.Field})

当我这样做时,它显示12/31/10,即使我已要求4位数年份。我想我很擅长,因为它不具有欺骗性。

但是,Crystal应该做些什么似乎是真正的旧日期?

而且,更重要的是,如果日期以不同的格式输入,现在会窒息吗?我想会的。

if NOT (IsNull({Table.Field})) then
  Date(ToNumber (Left ({Table.Field}, 4)),
       ToNumber (Mid ({Table.Field}, 6, 2)),
       ToNumber (Right ({Table.Field}, 2))
      )

这确实是个问题:

1)是否错误地显示错误的日期或2)报告窒息,如果自由格式的字符串日期格式不同,是否有第3(和更好)选项?

1 个答案:

答案 0 :(得分:0)

您可以创建两个公式:一个是日期,另一个是字符串。显示“新”日期的日期版本和“旧”日期的字符串1。字符串1将根据需要连接值。

// {@date_version}
DateValue ({Table.Field})

抑制逻辑:CurrentFieldValue<Date(1980,1,1)

// {@stirng_version}
{Table.Field}[6 to 7] + "/" + {Table.Field}[9 to 10] + "/19??"

抑制逻辑:{@date_version}>Date(1980,1,1)