VARCHART XGantt用戶手冊(ActiveX版):如何使用日歷(下)
VARCHART XGantt是一個交互式的甘特圖控件,其模塊化的設(shè)計讓您可以創(chuàng)建滿足您和您的客戶所需求的應(yīng)用程序。相較于其他甘特圖控件,VARCHART XGantt穩(wěn)定性高,開發(fā)時間長,各大行業(yè)的知名公司都在使用它。本文主要描述了如何使用日歷教程中的最后一部分內(nèi)容——如何使用日歷進(jìn)行計算~
點(diǎn)擊下載VARCHART XGantt免費(fèi)版
如何使用日歷進(jìn)行計算
日歷中的計算不一定在時間范圍內(nèi)可見。對象日歷的AddDuration方法從開始日期和指定的工作時間單位數(shù)計算最終日期,同時考慮到非工作時間。傳遞負(fù)號的時間單位將導(dǎo)致從給定的結(jié)束日期開始計算開始日期。 CalcDuration方法是AddDuration方法的補(bǔ)充,它從給定的開始日期和結(jié)束日期計算工作時間單位(持續(xù)時間)數(shù)。
計算方法是如何工作的
請注意:指定為天、小時、分鐘或秒的工作時間單位必須與VcGantt對象的屬性TimeUnit定義的時間單位相對應(yīng)。
AddDuration方法可確保所計算的日期始終位于工作時間間隔內(nèi)。同時,如果源值位于非工作時間內(nèi),則后向計算不一定提供與前向計算的源值相等的結(jié)果。
計算的有限可逆性
以交互方式創(chuàng)建或修改活動時,VARCHART XGantt會自動注意活動無法在非工作時間內(nèi)開始或結(jié)束。如果希望通過API創(chuàng)建或修改節(jié)點(diǎn)時行為保持一致,則需要通過手動更正開始日期或結(jié)束日期來確保這一點(diǎn)。為此,位于非工作時間中的開始日期需要移動到下一個工作時間間隔的開始,并且結(jié)束日期對應(yīng)于上一個工作時間間隔的結(jié)束。有一些方法可以確定間隔的極限。
示例代碼
If calendar.IsWorktime(StartDate) = False Then StartDate = calendar.GetNextIntervalBorder(StartDate) End If If calendar.IsWorktime(EndDate) = False Then EndDate = calendar.GetNextIntervalBorder(EndDate) End If
夏令時
VARCHART XGantt自動支持夏令時。在中歐,DST從3月的最后一個星期日開始,到10月的最后一個星期日結(jié)束。在夏令時開始時,時鐘從2:00 h延遲到3:00 h,在時鐘結(jié)束時從3:00 h延遲到2:00 h。
夏令時開始:
夏令時結(jié)束:
如果將TimeUnit設(shè)置為小時,則在夏時制的開始日期,方法calcDuration檢索23小時的時間跨度,而在最后一天,則返回25小時。如果設(shè)置為天,則兩種情況下的時間跨度均為1天。
檢索時間間隔的限制
Calendar對象用于檢索時間間隔GetStartOfInterval、GetNextIntervalBorder和GetPreviousIntervalBorder的限制的方法,允許迭代工作時間間隔和非工作時間間隔。返回的結(jié)果是相對的,并以方法作為參數(shù)傳遞的參考日期為參考。
可以通過Calendar對象的IsWorkTime方法檢查日期是否在工作時間或非工作時間。盡管新間隔的開始日期等于上一個間隔的結(jié)束日期,但是開始日期始終屬于新間隔(向右打開)。
方法GetEndOfPreviousWorkTime和GetStartOfNextWorkTime不提供新的選項,而只是簡化了工作時間間隔的處理。
在下面的編程示例中,將檢索日歷的時間間隔并將其寫入文件。此外,計算給定期間內(nèi)可用的工作時間:
示例代碼
Private Sub writeCalendarIntervalsToFile(ByVal filename As String, ByVal calendar As VcCalendar, ByVal startDate As Date, ByVal endDate As Date, ByVal listWorkIntervals As Boolean, ByVal listNonWorkIntervals As Boolean) Dim tmpStartDate As Date Dim nextStartDate As Date Dim totalWorkTime As Integer Open filename For Output As #1 Print #1, "Time Intervals of " & calendar.Name & "between " & startDate & " - " & endDate tmpStartDate = startDate Do While tmpStartDate < endDate nextStartDate = calendar.GetNextIntervalBorder(tmpStartDate) If tmpStartDate = nextStartDate Then nextStartDate = endDate End If If nextStartDate > endDate Then nextStartDate = endDate End If If calendar.IsWorktime(tmpStartDate) Then If listWorkIntervals Then Print #1, "WorkInterval" & " " & tmpStartDate & " " & nextStartDate End If Else If listNonWorkIntervals Then Print #1, "NonWorkInterval" & " " & tmpStartDate & " " & nextStartDate End If End If tmpStartDate = nextStartDate Loop totalWorkTime = calendar.CalcDuration(startDate, endDate) Print #1, "Total work time: " & totalWorkTime & " Units" Close #1 End Sub
請注意:日歷中的時間間隔可以精確地指定為秒,并且最多可以包含137年(以秒為單位)的間隔。
將時間間隔寫入文件的代碼
示例代碼
Call writeCalendarIntervalsToFile("C:\text.txt", calendar, VcGantt1.TimeScaleStart, VcGantt1.TimeScaleEnd, True, True) Time Intervals of CompanyCalendar_1 between 01.01.2011 00:00:00 - 01.01.2012 00:00:00 01.01.2011 00:00:00 - 02.01.2011 00:00:00 non-work time 02.01.2011 00:00:00 - 03.01.2011 00:00:00 non-work time 03.01.2011 00:00:00 - 03.01.2011 08:00:00 non-work time 03.01.2011 08:00:00 - 03.01.2011 12:00:00 work time 03.01.2011 12:00:00 - 03.01.2011 13:00:00 non-work time 03.01.2011 13:00:00 - 03.01.2011 17:00:00 work time 03.01.2011 17:00:00 - 04.01.2011 00:00:00 non-work time 04.01.2011 00:00:00 - 04.01.2011 08:00:00 non-work time 04.01.2011 08:00:00 - 04.01.2011 12:00:00 work time 04.01.2011 12:00:00 - 04.01.2011 13:00:00 non-work time 04.01.2011 13:00:00 - 04.01.2011 17:00:00 work time 04.01.2011 17:00:00 - 05.01.2011 00:00:00 non-work time ... 30.12.2011 00:00:00 - 30.12.2011 08:00:00 non-work time 30.12.2011 08:00:00 - 30.12.2011 12:00:00 work time 30.12.2011 12:00:00 - 30.12.2011 13:00:00 non-work time 30.12.2011 13:00:00 - 30.12.2011 17:00:00 work time 30.12.2011 17:00:00 - 31.12.2011 00:00:00 non-work time 31.12.2011 00:00:00 - 01.01.2012 00:00:00 non-work time Total work time: 2064 Units
本教程內(nèi)容到這里就完結(jié)了,感興趣的朋友可以繼續(xù)關(guān)注我們哦~您可以下載VARCHART XGantt試用版進(jìn)行體驗~
相關(guān)內(nèi)容推薦:
想要購買VARCHART XGantt正版授權(quán),或了解更多產(chǎn)品信息請點(diǎn)擊“咨詢在線客服”
1024,慧都致敬程序員們,zend現(xiàn)金優(yōu)惠券限時放送,了解詳情請點(diǎn)擊下方圖片