2011-11-07 951 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中實現它。