交互式甘特圖控件,教你如何使用日曆!

VARCHART XGantt是一個交互式的甘特圖控件,其模塊化的設計讓您能夠建立知足您和您的客戶所需求的應用程序。相較於其餘甘特圖控件,VARCHART XGantt穩定性高,開發時間長,各大行業的知名公司都在使用它。本文主要描述瞭如何使用日曆的內容,如今跟着小編來了解一下吧~
編程

日曆表示工做時間和非工做時間的無間隔序列。在具備可變配置文件的日曆(輪班日曆)中,不一樣的時間段會重複成功,例如早、晚或夜班。日曆自己沒有視覺外觀,僅是工做時間和非工做時間的邏輯區別。只有將日曆分配給CalendarGrid對象,日曆才能變得可見。app

在VARCHART XGantt中,日曆還能夠從工期中得出節點的開始和結束日期。若是未設置其餘選項,則將使用名爲BaseCalendar的預約義基本日曆進行全部計算。在基本日曆中,將星期一至星期五定義爲工做時間,而星期日和星期六則不工做。若是須要,能夠修改基本日曆。ide

定義日曆模塊化

日曆能夠在設計時經過屬性頁定義,也能夠在運行時經過應用程序編程接口(API)定義。在本文中,咱們將從開發人員的角度解釋日曆的基本處理,並提供一些C#編程示例。函數

VcGantt控件中,存在一個對象VcCalendarCollection,它負責管理全部日曆。它具備與VARCHART XGantt中的其餘集合相似的管理功能。預約義的BaseCalendar和在設計時建立的任何其餘日曆會自動構成集合的一部分。oop

能夠經過CalendarCollection對象的Add方法建立一個新日曆。該方法須要惟一的名稱才能識別日曆。最初,新日曆僅由工做時間組成。spa

請注意:日曆必須至少包含一個時間間隔,由於不能存在包含非工做時間的日曆。設計

爲了使咱們的編程示例的結果可在甘特圖的圖片中獲得驗證,爲編程示例中的時間範圍定義了從2011年1月1日到2011年12月31日的恆定時間段。若是日曆在集合中被激活,則日曆只能在甘特圖的背景中可見:3d

示例代碼orm

'To Create and to activate a new calendar
Dim calendar As VcCalendar
VcGantt1.TimeScaleEnd = "01.01.2012"
VcGantt1.TimeScaleStart = "01.01.2011" 
Set calendar = VcGantt1.CalendarCollection.Add("CompanyCalendar1")
VcGantt1.CalendarCollection.Active = calendar

VARCHART XGantt用戶手冊(ActiveX版):如何使用日曆(上)

若是如今但願從新激活默認的基本日曆,則能夠經過如下設置來執行此操做:

示例代碼

'To re-activate the default calendar
Dim calendar As VcCalendar
Set calendar =
VcGantt1.CalendarCollection.CalendarByName("BaseCalendar")
VcGantt1.CalendarCollection.Active = calendar

VARCHART XGantt用戶手冊(ActiveX版):如何使用日曆(上)

在下面的示例中,咱們將顯示如何按時間間隔定義工做時間配置文件。定義非工做日的不規則模式:2011年1月1日以及2011年1月6日至1月20日,除了10日和11日的兩天:

示例代碼

'Defining non-working times
VcGantt1.TimeScaleEnd = "01.01.2012"
VcGantt1.TimeScaleStart = "01.01.2011"
Dim calendar As VcCalendar
Set calendar = VcGantt1.CalendarCollection.Add("CompanyCalendar1")
VcGantt1.CalendarCollection.Active = calendar
Dim interval As VcInterval
Set interval = calendar.IntervalCollection.Add("NewYear")
interval.CalendarProfileName = ""
interval.StartDateTime = "01.01.2011"
interval.EndDateTime = "02.01.2011"
Set interval = calendar.IntervalCollection.Add("NonworkPeriod")
interval.CalendarProfileName = ""
interval.StartDateTime = "06.01.2011" 
interval.EndDateTime = "21.01.2011"
Set interval = calendar.IntervalCollection.Add("WorkPeriod")
interval.CalendarProfileName = ""
interval.StartDateTime = "11.01.2011"
interval.EndDateTime = "13.01.2011"
VcGantt1.CalendarCollection.Update

VARCHART XGantt用戶手冊(ActiveX版):如何使用日曆(上)

在視覺上,能夠經過淺灰色陰影來識別非工做時間。因爲默認狀況下工做時間沒有顏色,所以圖表的白色背景在其中仍然可見。在下一步中,咱們但願工做時間以淺黃顏色顯示,非工做時間以淺藍色顯示。顏色由可在間隔處定義的圖形屬性產生。

示例代碼

'Assigning colors to intervals
VcGantt1.TimeScaleEnd = "01.01.2012"
VcGantt1.TimeScaleStart = "01.01.2011"
Dim calendar As VcCalendar
Set calendar = VcGantt1.CalendarCollection.Add("CompanyCalendar1")
VcGantt1.CalendarCollection.Active = calendar
VcGantt1.TimeScaleCollection.FirstTimeScale.Section(0).CalendarGridEx(0)
.UseGraphicalAttributesOfIntervals = True
Dim interval As VcInterval
Set interval = calendar.IntervalCollection.Add("Work")
interval.CalendarProfileName = ""
interval.BackColorAsARGB = &HFFFFFFE0
interval.UseGraphicalAttributes = True
Set interval = calendar.IntervalCollection.Add("NewYear")
interval.CalendarProfileName = ""
interval.StartDateTime = "01.01.2011"
interval.EndDateTime = "02.01.2011"
interval.BackColorAsARGB = &HFFD4E3F5
interval.UseGraphicalAttributes = True
Set interval = calendar.IntervalCollection.Add("NonworkPeriod")
interval.CalendarProfileName = ""
interval.StartDateTime = "06.01.2011"
interval.EndDateTime = "21.01.2011"
interval.BackColorAsARGB = &HFFD4E3F5
interval.UseGraphicalAttributes = True
Set interval = calendar.IntervalCollection.Add("WorkPeriod") 
interval.CalendarProfileName = ""
interval.StartDateTime = "11.01.2011"
interval.EndDateTime = "13.01.2011"
interval.BackColorAsARGB = &HFFFFFFE0
interval.UseGraphicalAttributes = True
VcGantt1.CalendarCollection.Update

VARCHART XGantt用戶手冊(ActiveX版):如何使用日曆(上)

下面的示例顯示如何定義一個星期,其中星期一至星期五爲工做時間,而週末爲空閒時間。到目前爲止引入的選項還不足以知足此要求;必須提供VcCalendarProfile類型的對象。

請注意:在VARCHART XGantt中,能夠在全局或局部級別上定義VcCalendarProfile對象。本地日曆配置文件對象只能在定義它們的日曆中使用,而全局對象能夠同時在不一樣的日曆中使用。在咱們的編程示例中,僅使用本地日曆配置文件對象。就功能而言,本地日曆與全局日曆沒有區別。若是建立了具備相同名稱的本地配置文件和全局配置文件,則在相應的日曆內僅尋址本地配置文件;沒法訪問全局配置文件。

vcWeekProfile類型的日曆配置文件容許描述一週中某天的工做時間和非工做時間。僅在將周配置文件添加到日曆的間隔集合後,該配置文件才生效。能夠省略設置StartDateTimeEndDateTime,由於咱們但願咱們的設置在日曆的整個期間內都是有效的,沒有任何限制。預設名稱<WORK><NONWORK>的日曆配置文件具備定義的含義:它們用於分配工做時間和非工做時間。

示例代碼

'Defining a week profile
Dim calendar As VcCalendar
Dim interval As VcInterval
Dim calendarProfile As VcCalendarProfile
Set calendar = VcGantt1.CalendarCollection.Add("CompanyCalendar1")
VcGantt1.CalendarCollection.Active = calendar
Set calendarProfile =
calendar.CalendarProfileCollection.Add("WeekProfile")
calendarProfile.Type = vcWeekProfile 
VcGantt1.TimeScaleCollection.FirstTimeScale.Section(0).CalendarGridEx(0)
.UseGraphicalAttributesOfIntervals = True
Set interval = calendarProfile.IntervalCollection.Add("Mo-Fr")
interval.CalendarProfileName = ""
interval.StartWeekday = vcMonday
interval.EndWeekday = vcFriday

Set interval = calendarProfile.IntervalCollection.Add("Sa")
interval.CalendarProfileName = ""
interval.BackColorAsARGB = &HFFFFF69F
interval.StartWeekday = vcSaturday
interval.EndWeekday = vcSaturday
Set interval = calendarProfile.IntervalCollection.Add("Su")
interval.CalendarProfileName = ""
interval.BackColorAsARGB = &HFFFBD3AA
interval.StartWeekday = vcSunday
interval.EndWeekday = vcSunday
Set interval = calendar.IntervalCollection.Add("StandardWeek")
interval.CalendarProfileName = "WeekProfile"

區分一天中的工做時間和非工做時間須要一個日配置文件,該日配置文件能夠指定精確的時鐘時間,例如從8.00 h到12.00 h am和從1.00 h到5.00 h pm。因爲新建立的日簡介僅包含工做時間,所以任何中斷都應定義爲非工做間隔。

示例代碼

'Defining a day profile
Dim interval As VcInterval
Dim calendarProfile As VcCalendarProfile
Set calendarProfile =
calendar.CalendarProfileCollection.Add("DayProfile")
calendarProfile.Type = vcDayProfile
Set interval = calendarProfile.IntervalCollection.Add("Interval_1")
' 00:00-8:00
interval.CalendarProfileName = ""
interval.StartTime = "1.1.2011 0:00"
interval.EndTime = "1.1.2011 8:00"

Set interval = calendarProfile.IntervalCollection.Add("Interval_2")
' 12:00-13:00
interval.CalendarProfileName = ""
interval.StartTime = "1.1.2011 12:00"
interval.EndTime = "1.1.2011 13:00"
Set interval = calendarProfile.IntervalCollection.Add("Interval_3")
' 17:00-24:00
interval.CalendarProfileName = ""
interval.StartTime = "1.1.2011 17:00"
interval.EndTime = "1.1.2011 00:00"

時鐘時間由對象DateTime設置。日期部分被忽略,由於在這種狀況下它毫無心義。只須要在構造函數中設置日期,便可爲構造函數所需的全部參數設置一個值。在Interval_3中,指定0h或24h是很重要的,由於後者在DateTime對象中不被接受。

一年中的按期日期(例如1月1日的除夕夜或12月25日至26日的聖誕節節禮日),由涵蓋整年的日曆配置文件定義。

示例代碼

'Setting a profile of fixed annual holidays
Dim calendarProfile As VcCalendarProfile
Dim interval As VcInterval
Set calendarProfile =
calendar.CalendarProfileCollection.Add("YearProfile")
calendarProfile.Type = vcYearProfile
Set interval = calendarProfile.IntervalCollection.Add("New Year")
interval.CalendarProfileName = ""
interval.DayInStartMonth = 1
interval.StartMonth = vcJanuary
interval.DayInEndMonth = 1
interval.EndMonth = vcJanuary
Call SetAppearanceForHolidays(interval)
Set interval = calendarProfile.IntervalCollection.Add("Christmas")
interval.CalendarProfileName = ""
interval.DayInStartMonth = 25
interval.StartMonth = vcDecember
interval.DayInEndMonth = 26
interval.EndMonth = vcDecember
Call SetAppearanceForHolidays(interval)

爲了不重複設置產生相同的外觀,咱們使用名爲SetAppearanceForHolidays的方法收集調用:

示例代碼

'Method to set the visual appearance of holidays
Private Sub SetAppearanceForHolidays(ByVal interval As VcInterval)
 interval.BackColorAsARGB = &HFFFFA4A4
 interval.Pattern = vcWeavePattern
 interval.PatternColorAsARGB = &HFF404040
 interval.LineColor = &HFF808080
 interval.LineThickness = 1
 interval.LineType = vcSolid
 interval.UseGraphicalAttributes = True
End Sub

請注意:顏色屬性僅在其CalendarProfileName設置爲或的間隔內有效。另外,間隔屬性UseGraphicalAttribute須要設置爲true。對於calenderGrid屬性UseGraphicalAttributesOfIntervals一樣如此。

每一年必須計算浮動假期(例如復活節)和其餘與之相關的假期,而且須要將其做爲固定日期分配給日曆。下面的方法對此很是有用:

示例代碼

'Method to find floating holidays
Const AshWednesday = 0
Const GoodFriday = 1
Const EasterSunday = 2
Const EasterMonday = 3
Const FeastOfCorpusChristi = 4
Const AscensionOfChrist = 5
Const WhitSunday = 6
Const WhitMonday = 7
Const CentralEuropeanSummerTimeStart = 8
Const CentralEuropeanSummerTimeEnd = 9
Private Function calculateAnniversaryForYear(ByVal year As Integer,
ByVal specialDay As Integer) As Date
 Dim g As Integer
 Dim c As Integer
 Dim h As Integer
 Dim i As Integer
 Dim j As Integer
 Dim month As Integer
 Dim day As Integer
 Dim dayOffset As Integer

 g = year Mod 19
 c = year Mod 100
 h = (c - c / 4 - (8 * c + 13) / 25 + 19 * g + 15) Mod 30
 i = h - (h / 28) * (1 - (29 / (h + 1)) * ((21 - g) / 11))
 j = (year + year / 4 + i + 2 - c + c / 4) Mod 7
 month = 3 + (i - j + 40) / 44
 day = i - j + 28 - 31 * (month / 4)
 dayOffset = 0

 Select Case specialDay
 Case AshWednesday
 dayOffset = -40
 Case GoodFriday
 dayOffset = -2
 Case EasterSunday
 dayOffset = 0
 Case EasterMonday
 dayOffset = 1
 Case AscensionOfChrist
 dayOffset = 39
 Case WhitSunday
 dayOffset = 49
 Case WhitMonday
 dayOffset = 50
 Case FeastOfCorpusChristi
 dayOffset = 60
 Case CentralEuropeanSummerTimeStart 
 month = 3
 day = 31 - Weekday("31.3" + yearConvert + 1)
 Case CentralEuropeanSummerTimeEnd
 month = 10
 day = 31 - Weekday("31.10" + yearConvert + 1)
 End Select
 Dim tmpDate As Date
 tmpDate = day & "." & month & "." & year
 calculateAnniversaryForYear = tmpDate + dayOffset
End Function

在下一步中,將周配置文件和假日配置文件做爲間隔分配給日曆。而後以相同的方式計算浮動假期並將其分配給日曆:

示例代碼

'Assembling the week profile, the holiday profile and the floating
holidays into an interval
Set interval = calendar.IntervalCollection.Add("Weekly_Pattern")
interval.CalendarProfileName = "WeekProfile"

Set interval = calendar.IntervalCollection.Add("Yearly_Pattern")
interval.CalendarProfileName = "YearProfile"

Dim startYear As Integer
Dim endYear As Integer
startYear = year(VcGantt1.TimeScaleStart)
endYear = year(VcGantt1.TimeScaleEnd)

Dim i As Integer
For i = startYear To endYear Step i + 1
 Set interval = calendar.IntervalCollection.Add("GoodFriday_" & i)
 interval.CalendarProfileName = ""
 interval.StartDateTime = calculateAnniversaryForYear(i, GoodFriday)
 interval.EndDateTime = calculateAnniversaryForYear(i, EasterMonday)
 'interval.StartDateTime
 Call SetAppearanceForHolidays(interval)

 Set interval = calendar.IntervalCollection.Add("EasterMonday_" & i)
 interval.CalendarProfileName = ""
 interval.StartDateTime = calculateAnniversaryForYear(i, EasterMonday)
 interval.EndDateTime = interval.StartDateTime
 Call SetAppearanceForHolidays(interval)

 Set interval =
calendar.IntervalCollection.Add("FeastOfCorpusChristi_" & i)
 interval.CalendarProfileName = ""
 interval.StartDateTime = calculateAnniversaryForYear(i,
FeastOfCorpusChristi)
 interval.EndDateTime = interval.StartDateTime
 Call SetAppearanceForHolidays(interval)

 Set interval = calendar.IntervalCollection.Add("AscensionOfChrist_" &
i)
 interval.CalendarProfileName = ""
 interval.StartDateTime = calculateAnniversaryForYear(i,
AscensionOfChrist)
 interval.EndDateTime = interval.StartDateTime 
 Call SetAppearanceForHolidays(interval)

 Set interval = calendar.IntervalCollection.Add("WhitMonday_" & i)
 interval.CalendarProfileName = ""
 interval.StartDateTime = calculateAnniversaryForYear(i, WhitMonday)
 interval.EndDateTime = interval.StartDateTime
 Call SetAppearanceForHolidays(interval)
Next

VcGantt1.CalendarCollection.Update

VARCHART XGantt用戶手冊(ActiveX版):如何使用日曆(中)

這些是組裝日曆所需的摘要步驟。根據要求,能夠省略單個步驟:

  1. 建立不一樣工做日的日配置文件

  2. 經過使用日配置文件組裝周配置文件

  3. 定義假期資料

  4. 將星期概要和假日概要分配給日曆的間隔集合

  5. 爲間隔集合分配其餘日期(例如,浮動假期)

間隔對象容許定義可解釋爲工做時間或非工做時間的時間段。經過CalendarProfileName屬性將句點區分爲或。經過此屬性,日曆還能夠引用其餘現有配置文件並採用其設置。設置此屬性時,請注意,根據間隔類型,只能分配某些配置文件類型。間隔類型由選定的配置文件類型隱式選擇。日曆配置文件的預設默認值vcDayProfile能夠在初始時(即在定義間隔以前)經過相應的設置進行修改。

VARCHART XGantt用戶手冊(ActiveX版):如何使用日曆(中)

配置文件類型建議容許的間隔類型。例如,日期配置文件始終須要vcDayProfileInterval類型的間隔。

VARCHART XGantt用戶手冊(ActiveX版):如何使用日曆(中)

日曆配置文件能夠顯示類型爲日配置文件周配置文件年配置文件變量配置文件。在一天配置文件中,只能經過在一天的限制範圍內的時鐘時間來定義間隔。一週配置文件包含要在某些天應用的日期配置文件。年份配置文件分配選定的一天配置文件,這些配置文件適用於單個重複日期或幾個重複日期。變量配置文件包含一系列不一樣的工做時間。根據間隔類型vcCalendarIntervalvcDayProfileIntervalvcWeekProfileIntervalvcYearProfileIntervalvcVariableProfileInterval,僅對象的某些屬性是相關的。下表映射了概要文件類型和相關屬性。

VARCHART XGantt用戶手冊(ActiveX版):如何使用日曆(中)

CalendarInterval在精肯定義的間隔中描述了惟一的時間跨度。例:2010年5月5日從11:30時到2010年9月15日17:00時。

YearProfileInterval容許定義每一年重複一次的天數或時間跨度。例:5月1日或12月24日至26日。

WeekProfileInterval處理一週中的一天或幾天。例:星期六或星期一至星期五。

DayProfileInterval處理一天以內的時間規格。例:8.00至17.00。

VariableProfile描述了時間跨度,而不引用定義的日期或時間。時間間隔的單位能夠是天、小時、分鐘或秒,而且由時間間隔對象的屬性TimeUnit指定。例:4小時。

如何使用日曆進行計算

日曆中的計算不必定在時間範圍內可見。對象日曆AddDuration方法從開始日期和指定的工做時間單位數計算最終日期,同時考慮到非工做時間。傳遞負號的時間單位將致使從給定的結束日期開始計算開始日期。 CalcDuration方法是AddDuration方法的補充,它從給定的開始日期和結束日期計算工做時間單位(持續時間)數。

VARCHART XGantt用戶手冊(ActiveX版):如何使用日曆(下)

計算方法是如何工做的

請注意:指定爲天、小時、分鐘或秒的工做時間單位必須與VcGantt對象的屬性TimeUnit定義的時間單位相對應。

AddDuration方法可確保所計算的日期始終位於工做時間間隔內。同時,若是源值位於非工做時間內,則後向計算不必定提供與前向計算的源值相等的結果。

計算的有限可逆性

以交互方式建立或修改活動時,VARCHART XGantt會自動注意活動沒法在非工做時間內開始或結束。若是但願經過API建立或修改節點時行爲保持一致,則須要經過手動更正開始日期或結束日期來確保這一點。爲此,位於非工做時間中的開始日期須要移動到下一個工做時間間隔的開始,而且結束日期對應於上一個工做時間間隔的結束。有一些方法能夠肯定間隔的極限。

示例代碼

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月的最後一個星期日結束。在夏令時開始時,時鐘從2:00 h延遲到3:00 h,在時鐘結束時從3:00 h延遲到2:00 h。

夏令時開始:

VARCHART XGantt用戶手冊(ActiveX版):如何使用日曆(下)

夏令時結束:

VARCHART XGantt用戶手冊(ActiveX版):如何使用日曆(下)

若是將TimeUnit設置爲小時,則在夏時制的開始日期,方法calcDuration檢索23小時的時間跨度,而在最後一天,則返回25小時。若是設置爲天,則兩種狀況下的時間跨度均爲1天。

檢索時間間隔的限制

Calendar對象用於檢索時間間隔GetStartOfIntervalGetNextIntervalBorderGetPreviousIntervalBorder的限制的方法,容許迭代工做時間間隔和非工做時間間隔。返回的結果是相對的,並以方法做爲參數傳遞的參考日期爲參考。

能夠經過Calendar對象的IsWorkTime方法檢查日期是否在工做時間或非工做時間。儘管新間隔的開始日期等於上一個間隔的結束日期,可是開始日期始終屬於新間隔(向右打開)。

方法GetEndOfPreviousWorkTimeGetStartOfNextWorkTime不提供新的選項,而只是簡化了工做時間間隔的處理。

在下面的編程示例中,將檢索日曆的時間間隔並將其寫入文件。此外,計算給按期間內可用的工做時間:

示例代碼

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

本教程內容到這裏就完結了,感興趣的朋友能夠繼續關注咱們哦~

相關文章
相關標籤/搜索