package Ġio . github . mr aster isco . Date . platform Ċ Ċ import Ġio . github . mr aster isco . Date . Date Ċ import Ġio . github . mr aster isco . Date . utils . TimeZone Utils Ċ import Ġio . github . mr aster isco . time . milliseconds Ċ import Ġio . github . mr aster isco . time . nan oseconds Ċ import Ġplatform . Foundation .* Ċ Ċ @ Suppress (" unused ", Ġ" Red undant Visibility Modifier ") Ċ actual Ġclass ĠCalendar Ġactual Ġconstructor () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcalendar Ġ= ĠN SC al endar . current Calendar ĊĊĠĠĠ Ġprivate Ġval Ġall Units Ġ= ĠN SC al endar Unit Year Ġor ĠN SC al endar Unit Month Ġor ĠN SC al endar Unit Day Ġor ĠN SC al endar Unit Hour Ġor ĠN SC al endar Unit Minute Ġor ĠN SC al endar Unit Second ĊĊĠĠĠ Ġactual Ġconstructor ( date : ĠDate , Ġtime Zone : ĠAny ?) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . date Ġ= Ġdate ĊĠĠĠĠĠĠĠ Ġthis . time Zone Ġ= Ġtime Zone Ġ?: ĠTime Zone Utils . getDefault () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġvar Ġtime Zone : ĠAny ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcalendar . time Zone ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . time Zone Ġ= Ġvalue Ġas ĠN ST ime Zone ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġvar Ġdate : ĠDate Ġ= ĠDate () ĊĊĠĠĠ Ġactual Ġfun Ġget ( calendar Unit : ĠCalendar Unit ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar . time Zone Ġ= Ġthis . time Zone Ġas ĠN ST ime Zone ĊĠĠĠĠĠĠĠ Ġcalendar Unit To Platform Unit ( calendar Unit )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcalendar . component ( it , Ġthis . date . to Platform Date ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcalendar . component ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN SC al endar Unit Nan ose cond , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . date . to Platform Date () ĊĠĠĠĠĠĠĠ Ġ). nan oseconds . in Milliseconds . longValue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġset ( calendar Unit : ĠCalendar Unit , Ġvalue : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset ( HashMap < Calendar Unit , ĠLong >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( calendar Unit , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġset ( units And Values : ĠMap < Calendar Unit , ĠLong >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar . time Zone Ġ= Ġthis . time Zone Ġas ĠN ST ime Zone ĊĠĠĠĠĠĠĠ Ġval Ġcomponents Ġ= Ġcalendar . components ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Units , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . date . to Platform Date () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġunits And Values . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Component ( components , Ġit . key , Ġit . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . date Ġ= ĠDate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . date From Components ( components ) !! ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġis Same Day As ( other Date : ĠDate ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar . time Zone Ġ= Ġthis . time Zone Ġas ĠN ST ime Zone ĊĠĠĠĠĠĠĠ Ġreturn Ġcalendar . compare Date ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate . to Platform Date (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Date . to Platform Date (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN SC al endar Unit Day ĊĠĠĠĠĠĠĠ Ġ) Ġ== ĠNS Ordered Same ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġset To Mid night () Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar . time Zone Ġ= Ġthis . time Zone Ġas ĠN ST ime Zone ĊĊĠĠĠĠĠĠĠ Ġthis . date Ġ= ĠDate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . date By Setting Hour ( 0 , Ġ 0 , Ġ 0 , Ġthis . date . to Platform Date (), Ġ 0 u ) !! ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġadd ( calendar Unit : ĠCalendar Unit , Ġvalue : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar . time Zone Ġ= Ġthis . time Zone Ġas ĠN ST ime Zone ĊĊĠĠĠĠĠĠĠ Ġval Ġplatform Unit Ġ= Ġcalendar Unit To Platform Unit ( calendar Unit ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Platform Date Ġ= Ġthis . date . to Platform Date () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( platform Unit Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . date Ġ= ĠDate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . date By Adding Unit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplatform Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Platform Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN SC al endar Match Next Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġcurrent Platform Date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . date Ġ= ĠDate (( current Platform Date . time Interval Since 1 9 7 0 Ġ+ Ġvalue ). to Long ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalendar Unit To Platform Unit ( calendar Unit : ĠCalendar Unit ): ĠN SC al endar Unit ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( calendar Unit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Year Ġ-> ĠN SC al endar Unit Year ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Month Ġ-> ĠN SC al endar Unit Month ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Day Ġ-> ĠN SC al endar Unit Day ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Hour Ġ-> ĠN SC al endar Unit Hour ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Minute Ġ-> ĠN SC al endar Unit Minute ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Second Ġ-> ĠN SC al endar Unit Second ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Millisecond Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Component ( ĊĠĠĠĠĠĠĠ Ġcomponents : ĠNS Date Components , ĊĠĠĠĠĠĠĠ Ġcalendar Unit : ĠCalendar Unit , ĊĠĠĠĠĠĠĠ Ġvalue : ĠLong ĊĠĠĠ Ġ): ĠNS Date Components Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( calendar Unit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Year Ġ-> Ġcomponents . year Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Month Ġ-> Ġcomponents . month Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Day Ġ-> Ġcomponents . day Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Hour Ġ-> Ġcomponents . hour Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Minute Ġ-> Ġcomponents . minute Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Second Ġ-> Ġcomponents . second Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Unit . Millisecond Ġ-> Ġcomponents . nan ose cond Ġ= Ġvalue . milliseconds . in Nan oseconds . longValue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcomponents ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġfun Ġto Platform Calendar (): ĠN SC al endar Ġ= Ġcalendar Ċ Ċ }