如何根据当前系统日期获取日期功能以返回日期? 现在,使用下面的代码片段,它始终返回英国时间,而不是当前系统日期。
<calculate>
<script>$ = concat( num2date(date(), DateFmt()), " ", num2Time(Time(), TimeFmt()) )</script>
任何帮助表示赞赏!
答案 0 :(得分:0)
这可能不是英国时间,而是GMT(或UTC,使用更精确的术语)。英国恰好在冬季与GMT保持一致,但在夏季它将向BST推进一小时的夏令时。
现在,我自己从未使用过LiveCycle,但是,我已经阅读了LiveCycle FormCalc Date and Time Functions和the spec的一些最小文档,在我看来,一些重大错误是制成。
date
和time
函数返回基于UTC的值,但只有与时间相关的函数已知道本地时区。也就是说,有单独的Num2Time
和Num2GMTime
函数,但只有一个Num2Date
函数。
Num2Date
函数按整数天工作,因此它们只是1900-01-01
以来的几天。因此,传递给函数的数字必须已经代表所需的时区。但是,Date
函数仅获取当前的GMT日期。似乎没有函数来获取当前的本地日期。
由于涉及毫秒精度,因此在时间方面有所不同。然而,这里还有另一个缺陷。尽管文档说Time
函数返回“自纪元以来的毫秒数”,但其实际仅返回自午夜 GMT以来的毫秒数。从日期部分开始没有日常累积的毫秒数。 docs here甚至位于他们的示例代码中,其中包含:
返回当前系统时间,作为自纪元以来的毫秒数。
时间()=&gt; 71533235正好在下午3:52:15 2003年9月15日,东部标准时间(EST)区域的用户。
如果情况确实如此(并确保使用他们的1900-01-01纪元),该值实际上将包括另外3272572800000毫秒,表示1900-01-01
和2003-09-15
之间的天数,带来总时间戳为3272644333235.此外,还有一个拼写错误,因为他们给出的时间戳是3:52:13,而不是3:52:15。显然,没有人密切关注这些文档!
真正的问题是,无法确定本地时区当前天午夜以来的毫秒数在每天是相同的。如果不是获取当前时间,而是使用过去存储的时间值,如果由于夏令时,当前偏移量不同,则可能是一小时关闭(+或 - )。示例:东部时间可能是UTC-5或UTC-4,但Num2Time
函数仅使用当前有效的偏移量,即使您使用的日期使用的是其他偏移量。
因此,总而言之,Date
函数不足以导致您的观察,并且日期/时间功能通常设计不当。鉴于此API的限制,我甚至无法推荐一种解决方法。必须使用某种LocalDate
函数代替Date
函数,但它不存在。
我能提供的唯一建议是(从我的研究,而不是经验)看,LiveCycle可以使用 FormCalc或JavaScript。所以 - 改用JavaScript。