2011-11-07 959 views
1

在我的项目中,我有一个像这样的计算贷款开始日期:应该是开始日期+ 5个工作日。我能够获得当前日期,但不知道如何完成这个工作日的部分。 任何人都可以帮助我。COBOL中的日期函数

+0

告诉我们你有什么。 –

回答

0

检查您的编译器文档。你应该有一个数据格式,这是自一年的第一天以来的天数,或自任意日期(1900年1月1日和1600年1月1日是流行选择)以来的天数。

应该有一种方法,使用您的编译器运行时支持库将“Function Current-Date”的结果转换为这些表单之一。然后,加减日子很容易(或更容易)。一旦你添加了这些日子,把结果转换成你需要的任何格式。

或者,您可以编写自己的日期处理例程。即使你跨过一个月或一年的边界,你只需要在几个月和几年内实现“携带”。

0

查看此代码示例以了解如何编写自己的日期处理例程。

http://www.cobug.com/cobug/docs/futureDateCalc.html

它假定你能找出你目前的星期几。 (使用INTEGER OF DATE函数,除以7得到的值,其余为星期几 - 星期一至星期一为1,星期日为7)。

如果开始日期总是等于当天实际运行的日期代码,你也可以从星期几开始接受(PIC 9变量) ,星期一到星期一你会得到1。这只适用于当前日期。

0

虽然说起来很简单,但实际上您的问题实际上相当复杂。

通常COBOL编译器支持一些固有的功能,您可以使用它们来执行简单的日期运算。 INTEGER-OF-DATE和DATE-OF-INTEGER就是两个例子。 INTEGER-OF-DATE以'YYYYMMDD'格式取得日期 ,并将其转换为参考日期之后的天数,DATE-OF-INTEGER 从相同的参考日期开始计算天数并将其转换为'YYYYMMDD '格式。这是一个简单的事情来建立第三个例程来执行使用这些函数的简单日期算术。 目前为止这么好。

问题的难点在于确定:5个工作日。通常情况下,周末和某些假期为 不计为“营业日”,因此您需要添加的实际天数可能会从5到多于几个 多于5.例如,如果周末不计算在内,并且您的计算日期为星期五, ,那么您需要添加5 + 2 = 7天,以计算周六和周日不是营业日。

如果一周结束是所有您需要担心的事情,那么使用Zeller's Congruence来计算某一天所在的那一周的哪一天并不困难。 然后,根据每周的开始日期,您可以轻松确定是否需要在开始日期后的5,6或7天内添加 。

真正困难的部分是确定其他“非营业日”。一般而言,您需要某种查询表 ,因为本地化决定了这些将会是什么;并且当年的实际日期 因几个假期而不同(例如,该月的第二个星期一)。没有简单的方法来完成这部分工作。在我制定的系统 中,我们使用应用程序调用的内部标准例程来获取 “非商业”日期确定。该例程将日期和本地化参数作为 输入并返回布尔型是/否,具体取决于给定日期是否为给定本地化的 的非业务日期。我怀疑你需要实施类似的东西。使用某种公司范围的标准例程来确定非营业日期以确保您的所有系统彼此一致(如果系统“A”确定给定日期为非业务时不太好,这一点很重要一天,当系统“B”把它当作一个普通工作日)

3

我会假设你”不要在新店里工作。这就是说,应该有一个可用的函数库,人们已经为这些类型的任务编写了 - 当然,你的并不是使用工作日计算日期所需的第一个应用程序。我去过几家商店,每个商店都有可用的日期功能,所以我从来不必费心操作日期操作的细节。

如果你确实最终需要创建自己的逻辑,你可以通过创建一个函数来帮助每个人,然后你不必在COBOL中实现它。