Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 我应该如何在Crystal Reports中显示这个显然非常古老的日期?_Date_Crystal Reports_Formatting_Crystal Reports Xi - Fatal编程技术网

Date 我应该如何在Crystal Reports中显示这个显然非常古老的日期?

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

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

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??"