/* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 ĠN ich olas ĠB ily k Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . ac orn ui . core . time Ċ Ċ import Ġcom . ac orn ui . core . text . parse Date Ċ import Ġcom . ac orn ui . core . zero Padding Ċ import Ġcom . ac orn ui . serialization . Reader Ċ import Ġcom . ac orn ui . serialization . Writer Ċ Ċ interface ĠDate Ro Ġ: ĠComparable < Date Ro > Ġ{ ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġnumeric Ġvalue Ġof Ġthe Ġspecified Ġdate Ġas Ġthe Ġnumber Ġof Ġmilliseconds Ġsince ĠJanuary Ġ 1 , Ġ 1 9 7 0 , Ċĉ Ġ* Ġ 0 0 : 0 0 : 0 0 ĠUTC Ġ( negative Ġfor Ġprior Ġtimes ). Ċĉ Ġ*/ Ċ ĉ val Ġtime : ĠLong ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġfull Ġyear Ġaccording Ġto Ġlocal Ġtime . Ġ Ġ( e . g . Ġ 1 9 9 9 , Ġnot Ġ 9 9 ) Ċĉ Ġ*/ Ċ ĉ val Ġfull Year : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġ[ full Year ] Ġaccording Ġto Ġuniversal Ġtime . Ċĉ Ġ*/ Ċ ĉ val Ġut c Full Year : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġ 0 Ġindexed Ġmonth Ġaccording Ġto Ġlocal Ġtime . Ġ 0 Ġ- ĠJanuary , Ġ 1 1 Ġ- ĠDecember Ċĉ Ġ* Ġ@ see ĠMonth s Ċĉ Ġ*/ Ċ ĉ val Ġmonth Index : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġ 1 Ġindexed Ġmonth Ġaccording Ġto Ġlocal Ġtime . Ċĉ Ġ*/ Ċ ĉ val Ġmonth : ĠInt Ċĉ ĉ get () Ġ= Ġmonth Index Ġ+ Ġ 1 ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġ[ month Index ] Ġaccording Ġto Ġuniversal Ġtime . Ċĉ Ġ*/ Ċ ĉ val Ġut c Month Index : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġ[ month ] Ġaccording Ġto Ġuniversal Ġtime . Ċĉ Ġ*/ Ċ ĉ val Ġut c Month : ĠInt Ċĉ ĉ get () Ġ= Ġut c Month Index Ġ+ Ġ 1 ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġ 1 Ġindexed Ġday Ġof Ġthe Ġmonth Ġaccording Ġto Ġlocal Ġtime . Ġ 1 st Ġ- Ġ 1 , Ġ 3 1 st Ġ- Ġ 3 1 Ċĉ Ġ*/ Ċ ĉ val Ġday OfMonth : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġ[ day OfMonth ] Ġaccording Ġto Ġuniversal Ġtime . Ċĉ Ġ*/ Ċ ĉ val Ġut c Day OfMonth : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġday Ġof Ġthe Ġweek Ġ( 0 - 6 ) Ġaccording Ġto Ġlocal Ġtime . Ċĉ Ġ* Ġ 0 Ġ- ĠS unday , Ġ 6 Ġ- ĠS aturday Ċĉ Ġ*/ Ċ ĉ val Ġday OfWeek : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġ[ day OfWeek ] Ġaccording Ġto Ġuniversal Ġtime . Ċĉ Ġ*/ Ċ ĉ val Ġut c DayOfWeek : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠHour Ġof Ġthe Ġday Ġusing Ġ 2 4 - hour Ġclock Ġaccording Ġto Ġlocal Ġtime . Ċĉ Ġ* ĠAt Ġ 3 : 1 4 : 1 2 . 3 3 0 ĠPM Ġthe Ġhour Ġis Ġ 1 5 . Ċĉ Ġ*/ Ċ ĉ val Ġhour : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġ[ hour ] Ġaccording Ġto Ġuniversal Ġtime . Ċĉ Ġ*/ Ċ ĉ val Ġut c Hour : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġminute Ġwithin Ġthe Ġhour Ġaccording Ġto Ġlocal Ġtime . Ċĉ Ġ*/ Ċ ĉ val Ġminute : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġ[ minute ] Ġaccording Ġto Ġuniversal Ġtime . Ċĉ Ġ*/ Ċ ĉ val Ġut c Minute : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġsecond Ġwithin Ġthe Ġminute Ġaccording Ġto Ġlocal Ġtime . Ċĉ Ġ* ĠAt Ġ 3 : 1 4 : 1 2 . 3 3 0 ĠPM Ġthe Ġsecond Ġis Ġ 1 2 . Ċĉ Ġ*/ Ċ ĉ val Ġsecond : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġ[ second ] Ġaccording Ġto Ġuniversal Ġtime . Ċĉ Ġ*/ Ċ ĉ val Ġut c Second : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġmilli second Ġwithin Ġthe Ġsecond Ġaccording Ġto Ġlocal Ġtime . Ċĉ Ġ* ĠAt Ġ 3 : 1 4 : 1 2 . 3 3 0 ĠPM Ġthe Ġmilli Ġis Ġ 3 3 0 . Ċĉ Ġ*/ Ċ ĉ val Ġmilli : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġ[ milli ] Ġaccording Ġto Ġuniversal Ġtime . Ċĉ Ġ*/ Ċ ĉ val Ġut c Milli : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġtimezone Ġoffset Ġfrom Ġlocal Ġtime Ġto ĠGMT Ġin Ġminutes . Ċĉ Ġ*/ Ċ ĉ val Ġtimezone Offset : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠReturns Ġa Ġmutable Ġcopy Ġof Ġthis Ġdate . Ċĉ Ġ*/ Ċ ĉ fun Ġcopy (): ĠDate ĊĊ ĉ /** Ċĉ Ġ* ĠOutputs Ġto Ġthe ĠISO - 8 6 0 1 Ġstandard . ĠThe Ġformat Ġis : ĠYYYY - MM - DD TH H : mm : ss . sss Z Ċĉ Ġ*/ Ċ ĉ fun Ġto Iso String (): ĠString Ġ{ Ċĉ ĉ return Ġ"${ utc Full Year . zero Padding ( 4 )} -${ utc Month . zero Padding ( 2 )} -${ utc Day OfMonth . zero Padding ( 2 )} T ${ utc Hour . zero Padding ( 2 )} :${ utc Minute . zero Padding ( 2 )} :${ utc Second . zero Padding ( 2 )}. ${ utc Milli . zero Padding ( 3 )} Z " Ċ ĉ } ĊĊ ĉ override Ġfun Ġcompare To ( other : ĠDate Ro ): ĠInt Ġ{ Ċĉ ĉ return Ġtime . compareTo ( other . time ) Ċ ĉ } Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġtrue Ġif Ġthe Ġtwo Ġdates Ġare Ġthe Ġsame Ġday . Ċ Ġ*/ Ċ fun ĠDate Ro . is Same Date ( o : ĠDate Ro ): ĠBoolean Ġ{ Ċ ĉ return Ġthis . day OfMonth Ġ== Ġo . day OfMonth Ġ&& Ġthis . month Index Ġ== Ġo . month Index Ġ&& Ġthis . full Year Ġ== Ġo . full Year Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġtrue Ġif Ġthis ĠDate 's Ġyear Ġis Ġa Ġle ap Ġyear . Ċ Ġ*/ Ċ val ĠDate Ro . is Le ap Year : ĠBoolean Ċ ĉ get () Ġ= ĠDate Util . is Le ap Year ( full Year ) Ċ Ċ /** Ċ Ġ* ĠA ĠDate Ġobject . Ċ Ġ* ĠTo Ġconvert Ġthis Ġdate Ġto Ġa Ġstring , Ġuse Ġ[ com . ac orn ui . core . text . DateTime Formatter ] Ċ Ġ* Ġ@ author Ġnb ily k Ċ Ġ*/ Ċ interface ĠDate Ġ: ĠDate Ro Ġ{ ĊĊ ĉ override Ġvar Ġtime : ĠLong ĊĊ ĉ override Ġvar Ġfull Year : ĠInt Ċ ĉ override Ġvar Ġut c Full Year : ĠInt ĊĊ ĉ override Ġvar Ġmonth Index : ĠInt Ċ ĉ override Ġvar Ġmonth : ĠInt Ċĉ ĉ get () Ġ= Ġmonth Index Ġ+ Ġ 1 Ċĉ ĉ set ( value ) Ġ{ Ċĉĉ ĉ month Index Ġ= Ġvalue Ġ- Ġ 1 Ċĉ ĉ } ĊĊ ĉ override Ġvar Ġut c Month Index : ĠInt Ċ ĉ override Ġvar Ġut c Month : ĠInt Ċĉ ĉ get () Ġ= Ġut c Month Index Ġ+ Ġ 1 Ċĉ ĉ set ( value ) Ġ{ Ċĉĉ ĉ utc Month Index Ġ= Ġvalue Ġ- Ġ 1 Ċĉ ĉ } ĊĊ ĉ override Ġvar Ġday OfMonth : ĠInt Ċ ĉ override Ġvar Ġut c Day OfMonth : ĠInt ĊĊ ĉ override Ġvar Ġhour : ĠInt Ċ ĉ override Ġvar Ġut c Hour : ĠInt ĊĊ ĉ override Ġvar Ġminute : ĠInt Ċ ĉ override Ġvar Ġut c Minute : ĠInt ĊĊ ĉ override Ġvar Ġsecond : ĠInt Ċ ĉ override Ġvar Ġut c Second : ĠInt ĊĊ ĉ override Ġvar Ġmilli : ĠInt Ċ ĉ override Ġvar Ġut c Milli : ĠInt ĊĊ ĉ /** Ċĉ Ġ* ĠA Ġconvenience Ġfunction Ġfor Ġsetting Ġthe Ġtime Ġof Ġday Ġon Ġa ĠDate Ġobject . Ċĉ Ġ* ĠNote Ġthat Ġif Ġthe Ġtime Ġprovided Ġis Ġbeyond Ġthe Ġrange Ġof Ġa Ġday , Ġthe Ġdate Ġwill Ġchange . Ċĉ Ġ*/ Ċ ĉ fun Ġset Time OfDay ( hour : ĠInt , Ġminute : ĠInt , Ġsecond : ĠInt Ġ= Ġ 0 , Ġmilli : ĠInt Ġ= Ġ 0 ): ĠDate Ġ{ Ċĉ ĉ this . hour Ġ= Ġhour Ċĉ ĉ this . minute Ġ= Ġminute Ċĉ ĉ this . second Ġ= Ġsecond Ċĉ ĉ this . milli Ġ= Ġmilli Ċĉ ĉ return Ġthis Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠA Ġconvenience Ġfunction Ġfor Ġsetting Ġthe ĠUTC Ġtime Ġof Ġday Ġon Ġa ĠDate Ġobject . Ċĉ Ġ* ĠNote Ġthat Ġif Ġthe Ġtime Ġprovided Ġis Ġbeyond Ġthe Ġrange Ġof Ġa Ġday , Ġthe Ġdate Ġwill Ġchange . Ċĉ Ġ*/ Ċ ĉ fun Ġset Utc Time OfDay ( hour : ĠInt , Ġminute : ĠInt , Ġsecond : ĠInt Ġ= Ġ 0 , Ġmilli : ĠInt Ġ= Ġ 0 ): ĠDate Ġ{ Ċĉ ĉ this . utc Hour Ġ= Ġhour Ċĉ ĉ this . utc Minute Ġ= Ġminute Ċĉ ĉ this . utc Second Ġ= Ġsecond Ċĉ ĉ this . utc Milli Ġ= Ġmilli Ċĉ ĉ return Ġthis Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠA Ġconvenience Ġfunction Ġfor Ġsetting Ġthe Ġdate Ġon Ġa ĠDate Ġobject . Ċĉ Ġ*/ Ċ ĉ fun Ġset Date ( full Year : ĠInt , Ġmonth : ĠInt , Ġday OfMonth : ĠInt ): ĠDate Ġ{ Ċĉ ĉ this . full Year Ġ= Ġfull Year Ċĉ ĉ this . month Ġ= Ġmonth Ċĉ ĉ this . day OfMonth Ġ= Ġday OfMonth Ċĉ ĉ return Ġthis Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠA Ġconvenience Ġfunction Ġfor Ġsetting Ġthe Ġut c Ġdate Ġon Ġa ĠDate Ġobject . Ċĉ Ġ*/ Ċ ĉ fun Ġset Utc Date ( full Year : ĠInt , Ġmonth : ĠInt , Ġday OfMonth : ĠInt ): ĠDate Ġ{ Ċĉ ĉ this . utc Full Year Ġ= Ġfull Year Ċĉ ĉ this . utc Month Ġ= Ġmonth Ċĉ ĉ this . utc Day OfMonth Ġ= Ġday OfMonth Ċĉ ĉ return Ġthis Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠSets Ġthis Ġdate Ġobject Ġto Ġmatch Ġthe Ġtime Ġof Ġthe Ġother Ġdate Ġobject . Ċĉ Ġ*/ Ċ ĉ fun Ġset ( other : ĠDate Ro ): ĠDate Ġ{ Ċĉ ĉ this . time Ġ= Ġother . time Ċĉ ĉ return Ġthis Ċ ĉ } Ċ Ċ } Ċ Ċ enum Ġclass ĠE ra Ġ{ ĊĊ ĉ /** Ċĉ Ġ* ĠBefore Ġcommon Ġera Ġ( Before Ġch rist ) Ċĉ Ġ*/ Ċ ĉ B CE , ĊĊ ĉ /** Ċĉ Ġ* ĠCommon Ġera Ġ( Anno Ġdom ini ) Ċĉ Ġ*/ Ċ ĉ CE Ċ } ĊĊ Ċ fun ĠReader . date Iso (): ĠDate ? Ġ= Ġparse Date ( string ()) Ċ fun ĠReader . date Iso ( name : ĠString ): ĠDate ? Ġ= Ġget ( name )?. date Iso () Ċ fun ĠWriter . date Iso ( date : ĠDate Ro ?) Ġ{ Ċ ĉ if Ġ( date Ġ== Ġnull ) Ġwrite Null () Ċ ĉ else Ġstring ( date . to Iso String ()) Ċ } Ċ fun ĠWriter . date Iso ( name : ĠString , Ġdate : ĠDate Ro ?) Ġ= Ġproperty ( name ). date Iso ( date ) Ċ Ċ /** Ċ Ġ* ĠReads Ġthe Ġdate Ġas Ġa ĠLong Ġ- Ġthe Ġnumber Ġof Ġmilliseconds Ġfrom Ġthe ĠUnix ĠEpoch . Ċ Ġ*/ Ċ fun ĠReader . dateTime (): ĠDate ? Ġ{ Ċ ĉ val Ġt Ġ= Ġlong () Ġ?: Ġreturn Ġnull Ċ ĉ return Ġtime . date ( t ) Ċ } Ċ fun ĠReader . dateTime ( name : ĠString ): ĠDate ? Ġ= Ġget ( name )?. dateTime () Ċ Ċ /** Ċ Ġ* ĠWrites Ġthe Ġdate Ġas Ġa ĠLong Ġ- Ġthe Ġnumber Ġof Ġmilliseconds Ġfrom Ġthe ĠUnix ĠEpoch . Ċ Ġ*/ Ċ fun ĠWriter . dateTime ( date : ĠDate Ro ?) Ġ{ Ċ ĉ if Ġ( date Ġ== Ġnull ) Ġwrite Null () Ċ ĉ else Ġlong ( date . time ) Ċ } Ċ fun ĠWriter . dateTime ( name : ĠString , Ġdate : ĠDate Ro ?) Ġ= Ġproperty ( name ). dateTime ( date )