COBOL中的日期功能

时间:2011-11-07 03:49:47

标签: date cobol

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

5 个答案:

答案 0 :(得分:3)

我假设你不在新店里工作。话虽这么说,应该有一个人们为这些任务编写的函数库 - 当然,你的函数不是第一个使用工作日计算日期的应用程序。我去过几家商店,每个商店都有日期功能,所以我从来不必费心去处理日期操作的细节。

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

答案 1 :(得分:0)

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

应该有一种方法,使用编译器运行时支持库将“Function Current-Date”的结果转换为其中一种形式。然后,添加和减少日子很容易(或更容易)。添加日期后,将结果转换为您需要的任何格式。

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

答案 2 :(得分:0)

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

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

它假设你能够弄清楚你现在在哪一天。 (使用INTEGER OF DATE函数,将得到的数除以7,其余为星期几 - 星期一为1,星期日为7。)

如果开始日期总是等于您实际运行代码的同一天,您也可以这样做 接受(PIC 9变量)从周日开始,星期一到星期日你将获得1到星期日。这仅适用于当前日期。

答案 3 :(得分: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”将其视为正常工作日的那一天)

答案 4 :(得分:0)

您也可以使用以下SYSDUMMY1查询执行相同操作:

SELECT (CURDATE()+5 days) 
FROM SYSIBM.SYSDUMMY1
WITH UR;

参考DB2 Basics: Fun with Dates and Times