/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠBoston ĠVan se ghi Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġb van seg . kotlin commons . time . api Ċ Ċ import Ġb van seg . kotlin commons . util . HashCode Builder Ċ import Ġjava . time . LocalDateTime Ċ Ċ /** Ċ Ġ* Ġ@ author ĠBoston ĠVan se ghi Ċ Ġ* Ġ@ since Ġ 2 . 8 . 0 Ċ Ġ*/ Ċ open Ġclass ĠK h rono DateTime ( open Ġval Ġdate : ĠK h rono Date , Ġopen Ġval Ġtime : ĠK h rono Time ) Ġ: ĠK h rono Type , ĊĠĠĠ ĠComparable < Kh rono DateTime > Ġ{ ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġday : ĠDouble , ĊĠĠĠĠĠĠĠ Ġmonth : ĠInt , ĊĠĠĠĠĠĠĠ Ġyear : ĠDouble ĊĠĠĠ Ġ) Ġ: Ġthis ( Kh rono Date ( day , Ġmonth , Ġyear ), ĠK h rono Time ()) ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġday : ĠDouble , ĊĠĠĠĠĠĠĠ Ġmonth : ĠInt , ĊĠĠĠĠĠĠĠ Ġyear : ĠDouble , ĊĠĠĠĠĠĠĠ Ġhour : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġminute : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġsecond : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġmilli second : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġmicro second : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġnan ose cond : ĠDouble Ġ= Ġ 0 . 0 ĊĠĠĠ Ġ) Ġ: Ġthis ( Kh rono Date ( day , Ġmonth , Ġyear ), ĠK h rono Time ( hour , Ġminute , Ġsecond , Ġmilli second , Ġmicro second , Ġnan ose cond )) ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġday : ĠDouble , ĊĠĠĠĠĠĠĠ Ġmonth : ĠK h rono Month , ĊĠĠĠĠĠĠĠ Ġyear : ĠDouble , ĊĠĠĠĠĠĠĠ Ġhour : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġminute : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġsecond : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġmilli second : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġmicro second : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġnan ose cond : ĠDouble Ġ= Ġ 0 . 0 ĊĠĠĠ Ġ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ ĠK h rono Date ( day , Ġmonth . month Value , Ġyear ), ĊĠĠĠĠĠĠĠ ĠK h rono Time ( hour , Ġminute , Ġsecond , Ġmilli second , Ġmicro second , Ġnan ose cond ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġopen Ġval Ġday : ĠK h rono ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdate . day ĊĠĠĠ Ġopen Ġval Ġmonth : ĠK h rono ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdate . month Kh rono ĊĠĠĠ Ġopen Ġval Ġyear : ĠK h rono ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdate . year ĊĊĠĠĠ Ġopen Ġval Ġhour : ĠK h rono ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtime . hour ĊĠĠĠ Ġopen Ġval Ġminute : ĠK h rono ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtime . minute ĊĠĠĠ Ġopen Ġval Ġsecond : ĠK h rono ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtime . second ĊĠĠĠ Ġopen Ġval Ġmilli second : ĠK h rono ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtime . milli second ĊĠĠĠ Ġopen Ġval Ġmicro second : ĠK h rono ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtime . micro second ĊĠĠĠ Ġopen Ġval Ġnan ose cond : ĠK h rono ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtime . nan ose cond ĊĊĠĠĠ Ġoverride Ġval Ġas Nan os : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as Nan os Ġ+ Ġtime . as Nan os Ġ} ĊĠĠĠ Ġopen Ġval Ġas Micro s : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as Micro s Ġ+ Ġtime . as Micro s Ġ} ĊĠĠĠ Ġopen Ġval Ġas Millis : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as Millis Ġ+ Ġtime . as Millis Ġ} ĊĠĠĠ Ġopen Ġval Ġas Seconds : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as Seconds Ġ+ Ġtime . as Seconds Ġ} ĊĠĠĠ Ġopen Ġval Ġas Minutes : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as Minutes Ġ+ Ġtime . as Minutes Ġ} ĊĠĠĠ Ġopen Ġval Ġas Hours : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as Hours Ġ+ Ġtime . as Hours Ġ} ĊĠĠĠ Ġopen Ġval Ġas Half Days : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as Half Days Ġ+ Ġtime . as Half Days Ġ} ĊĠĠĠ Ġopen Ġval Ġas Days : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as Days Ġ+ Ġtime . as Days Ġ} ĊĠĠĠ Ġopen Ġval Ġas Week s : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as Week s Ġ+ Ġtime . as Week s Ġ} ĊĠĠĠ Ġopen Ġval Ġas Years : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as Years Ġ+ Ġtime . as Years Ġ} ĊĠĠĠ Ġopen Ġval Ġas De ca des : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as De ca des Ġ+ Ġtime . as De ca des Ġ} ĊĠĠĠ Ġopen Ġval Ġas Cent ur ies : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as Cent ur ies Ġ+ Ġtime . as Cent ur ies Ġ} ĊĠĠĠ Ġopen Ġval Ġas M ill enn ium s : ĠDouble Ġby Ġlazy Ġ{ Ġdate . as M ill enn ium s Ġ+ Ġtime . as M ill enn ium s Ġ} ĊĊĠĠĠ Ġfun Ġto LocalDateTime (): ĠLocalDateTime Ġ= ĠLocalDateTime . of ( ĊĠĠĠĠĠĠĠ Ġdate . year . toInt (), ĊĠĠĠĠĠĠĠ Ġdate . month . month Value , ĊĠĠĠĠĠĠĠ Ġdate . day . toInt (), ĊĠĠĠĠĠĠĠ Ġtime . hour . toInt (), ĊĠĠĠĠĠĠĠ Ġtime . minute . toInt (), ĊĠĠĠĠĠĠĠ Ġtime . second . toInt (), ĊĠĠĠĠĠĠĠ Ġtime . milli second . to Nan os (). toInt () Ġ+ Ġtime . micro second . to Nan os (). toInt () Ġ+ Ġtime . nan ose cond . value . toInt () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġis Before ( upper Bound : ĠK h rono Type ): ĠBoolean Ġ= Ġthis . as Nan os Ġ< Ġupper Bound . as Nan os ĊĠĠĠ Ġoverride Ġfun Ġis Before Or At ( upper Bound : ĠK h rono Type ): ĠBoolean Ġ= Ġthis . as Nan os Ġ<= Ġupper Bound . as Nan os ĊĊĠĠĠ Ġoverride Ġfun Ġis After ( lower Bound : ĠK h rono Type ): ĠBoolean Ġ= Ġthis . as Nan os Ġ> Ġlower Bound . as Nan os ĊĠĠĠ Ġoverride Ġfun Ġis At Or After ( lower Bound : ĠK h rono Type ): ĠBoolean Ġ= Ġthis . as Nan os Ġ>= Ġlower Bound . as Nan os ĊĊĠĠĠ Ġfun Ġto Mutable (): ĠMutable Kh rono DateTime Ġ= ĠMutable Kh rono DateTime ( date . to Mutable (), Ġtime . to Mutable ()) ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ"$ date -$ time " ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠK h rono DateTime ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . date Ġ!= Ġother . date ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( this . time Ġ!= Ġother . time ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= ĠHash Code Builder . builder ( this :: class ) ĊĠĠĠĠĠĠĠ Ġ. append ( date ) ĊĠĠĠĠĠĠĠ Ġ. append ( time ) ĊĠĠĠĠĠĠĠ Ġ. hashCode () ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠK h rono DateTime ): ĠInt Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . as Nan os Ġ< Ġother . as Nan os Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġthis . as Nan os Ġ> Ġother . as Nan os Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġyesterday (): ĠK h rono DateTime Ġ= Ġnow (). to Mutable (). apply Ġ{ Ġday Ġ- Ġ 1 Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġnow (): ĠK h rono DateTime Ġ= ĠLocalDateTime . now (). to Kh rono DateTime () ĊĠĠĠĠĠĠĠ Ġfun Ġtomorrow (): ĠK h rono DateTime Ġ= Ġnow (). to Mutable (). apply Ġ{ Ġday Ġ+ Ġ 1 Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġaf tern oon (): ĠK h rono DateTime Ġ= ĠK h rono DateTime ( Kh rono Date . now (), ĠK h rono Time ( hr Ġ= Ġ 1 2 . 0 )) ĊĠĠĠĠĠĠĠ Ġfun Ġmid night (): ĠK h rono DateTime Ġ= ĠK h rono DateTime ( Kh rono Date . now (), ĠK h rono Time ()) ĊĠĠĠ Ġ} Ċ }