gpt4 book ai didi

daml - 获取今天日期的函数?

转载 作者:行者123 更新时间:2023-12-01 16:30:10 31 4
gpt4 key购买 nike

我正在契约(Contract)模板中创建一个“选择”,需要检查今天的日期。我的DAML代码如下:

controller dealer can
Add_Car : CarId
with
startCoverage: Date

do
-- Check for a legal start date
assert (
startCoverage > *today* --should check that its not before today
)
create this with date_vehicle_added = startCoverage

我可以用来获取当前日期的函数的名称是什么?它需要转到“*today*”所在的位置。

最佳答案

tldr:使用getTime:更新时间toDateUTC:时间->日期,但要注意其中的陷阱。最好使用公证日期如果可能的话,模式。

隐式建模日期/时间

对日期和时间建模始终是一个微妙的问题,当处理确定性的分布式系统,例如数字系统分类帐。 DAML 提供了一个原始函数 getTime ,它将返回账本模型保证的“账本有效时间”(LET)单调递增的时间值(以毫秒为单位),即限制在账本定义的挂钟 UTC 时间增量内。可以使用 toDateUTC 函数将其转换为 UTC 日期DA.日期。这是对你的问题的直接回答,但有一些注意事项。

  1. 此时间和日期采用 UTC 格式,您必须显式建模这与本地时间如何对应。由于 DAML 是确定性的,分布式系统,任何给定的事务都没有本地时间必须跨多个时区确定性地执行。

  2. 无端使用日期/时间比较可能会导致契约(Contract)被因时间的流逝而悄然停滞。如果一个选择受到保护通过检查挂钟时间,这可能意味着任何延迟您的应用程序处理练习可能会导致选择变得无效。确保您在自己的国家妥善处理此案应用程序代码是一个微妙的问题——因为这是一个隐含的问题参数由您选择,无需操作干预即使您有提前警告,也可以避免该问题。

  3. 模型和应用程序的集成测试变得在存在明确时间的情况下是非确定性和不可重复的比较。虽然您可以为您的项目编写可重复的Scenario测试模型,因为您在那里有明确的 LET 控制,这不会行使您的账外应用程序。

显式建模日期/时间

另一种选择是公证日期模式。在此,签署者契约(Contract)约定受信任方对当前日期进行公证。这公证采用账本上的 CurrentDate 契约(Contract)的形式。本契约(Contract)由公证人作为签字人,一般有由公证人控制的单一消费选择,以推进日期。

如果您使用此方法,您的 Add_Car 选择将需要额外的时间参数currentDate : ContractId CurrentDate,你可以认为作为控制者提供证据或证明同意的出于本目的,公证人已证明当前日期契约(Contract)。这解决了隐式时间模型的问题:

  1. 由于日期现在在分类帐上是明确的,所以时区在CurrentDate 合约的进度。

  2. 如果公证人提前付款,契约(Contract)仍可能被搁置当前日期契约(Contract),日期管理手段的明确性a) 在公证日期更新之前排序的任何事件都将处理成功;这意味着,b)现在有一条途径预先警告您的操作干预某一天的处理进度落后于计划 - 假设这样公证协议(protocol)预期并允许干预。

  3. 由于系统的操作再次成为账本内容的纯粹函数,因此大型应用程序的行为变得确定性且可重复。这大大减少了所需的工作量用于维护、测试和调试。

出于这些原因,我建议使用公证日期模式,其中这是可能的,为那些情况保留隐式日期处理确实没有其他选择。

关于daml - 获取今天日期的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54774634/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com