Date 我应该如何在Crystal Reports中显示这个显然非常古老的日期?
我有一个字符串字段,其中日期有时输入为YYYY-MM-DD,并将其作为日期显示在Crystal报表上。我在用Date 我应该如何在Crystal Reports中显示这个显然非常古老的日期?,date,crystal-reports,formatting,crystal-reports-xi,Date,Crystal Reports,Formatting,Crystal Reports Xi,我有一个字符串字段,其中日期有时输入为YYYY-MM-DD,并将其作为日期显示在Crystal报表上。我在用 DateValue ({Table.Field}) 显示日期,然后将日期格式化为MM/DD/YYYY。这看起来不错,直到我看到1931年12月10日的日期,发现它与数据库中的“0010-12-31”不匹配 我知道这只是一个输入错误,我可以看到日期可能应该是2010年12月31日,但我想显示他们输入的内容。因此,就这一次而言,我提出以下内容: if {Table.Field} = '00
DateValue ({Table.Field})
显示日期,然后将日期格式化为MM/DD/YYYY。这看起来不错,直到我看到1931年12月10日的日期,发现它与数据库中的“0010-12-31”不匹配
我知道这只是一个输入错误,我可以看到日期可能应该是2010年12月31日,但我想显示他们输入的内容。因此,就这一次而言,我提出以下内容:
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)如果自由格式字符串日期的格式不同,则报告阻塞之后是否有第三个(更好)选项?您可以创建两个公式:一个是日期,另一个是字符串。显示“新”日期的日期版本和“旧”日期的字符串版本。字符串one将根据需要连接这些值
// {@date_version}
DateValue ({Table.Field})
抑制逻辑:
CurrentFieldValueDate(1980,1,1)
这里有三个问题,所以很难回答。还有,“真正的老约会”到底是什么?你基本上只是想优雅地处理一个存储在字符串中的日期,对吗?如果你的日期是以字符串的形式手动输入的,并且可能采用不同的格式,那么你除了检查每种可能性之外别无选择。DateValue
函数是一个良好的开端,但显然它无法处理所有可能的输入。仅供参考,DateValue
也不能处理100年以下的年份,这就是为什么你的第一个日期是1931年。就个人而言,我不会“更正”日期——这是一个很滑的斜坡,会导致更正各种用户或系统生成的错误。最好注意这个问题,并与适当的个人讨论。这样就可以纠正过程错误和数据。@craig-是的,但我只是在测试时才发现这个问题,如果错误的日期打印为某种有效的数据,可能很难发现。显示的日期是否与数据库完全不同当然不是很明显。@Ryan-我想知道DateValue的工作时间有多远。非常感谢。
// {@stirng_version}
{Table.Field}[6 to 7] + "/" + {Table.Field}[9 to 10] + "/19??"