/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġkotlin . time Ċ Ċ import Ġkotlin . contracts .* Ċ import Ġkotlin . jvm . Jvm Inline Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . round ToInt Ċ import Ġkotlin . math . sign Ċ Ċ /** Ċ Ġ* ĠRepresents Ġthe Ġamount Ġof Ġtime Ġone Ġinstant Ġof Ġtime Ġis Ġaway Ġfrom Ġanother Ġinstant . Ċ Ġ* Ċ Ġ* ĠA Ġnegative Ġduration Ġis Ġpossible Ġin Ġa Ġsituation Ġwhen Ġthe Ġsecond Ġinstant Ġis Ġearlier Ġthan Ġthe Ġfirst Ġone . Ċ Ġ* ĠAn Ġinfinite Ġduration Ġvalue Ġ[ Duration . INF IN ITE ] Ġcan Ġbe Ġused Ġto Ġrepresent Ġinfinite Ġtimeouts . Ċ Ġ* Ċ Ġ* ĠThe Ġtype Ġcan Ġstore Ġduration Ġvalues Ġup Ġto ĠÂ ± 1 4 6 Ġyears Ġwith Ġnan ose cond Ġprecision , Ċ Ġ* Ġand Ġup Ġto ĠÂ ± 1 4 6 Ġmillion Ġyears Ġwith Ġmilli second Ġprecision . Ċ Ġ* Ċ Ġ* ĠTo Ġconstruct Ġa Ġduration , Ġuse Ġeither Ġthe Ġextension Ġfunction Ġ[ to Duration ] Ġavailable Ġon Ġ[ Int ], Ġ[ Long ], Ġand Ġ[ Double ] Ġnumeric Ġtypes , Ċ Ġ* Ġor Ġthe Ġ` Duration ` Ġcompanion Ġobject Ġfunctions Ġ[ Duration . hours ], Ġ[ Duration . minutes ], Ġ[ Duration . seconds ], Ġand Ġso Ġon , Ċ Ġ* Ġtaking Ġ[ Int ], Ġ[ Long ], Ġor Ġ[ Double ] Ġnumbers Ġas Ġparameters . Ċ Ġ* Ċ Ġ* ĠTo Ġget Ġthe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġin Ġa Ġparticular Ġ[ duration Ġunits ][ Duration Unit ] Ċ Ġ* Ġuse Ġthe Ġfunctions Ġ[ toInt ], Ġ[ to Long ], Ġand Ġ[ toDouble ] Ċ Ġ* Ġor Ġthe Ġproperties Ġ[ in Whole Hours ], Ġ[ in Whole Minutes ], Ġ[ in Whole Seconds ], Ġ[ in Whole Nan oseconds ], Ġand Ġso Ġon . Ċ Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Jvm Inline Ċ public Ġvalue Ġclass ĠDuration Ġinternal Ġconstructor ( private Ġval Ġraw Value : ĠLong ) Ġ: ĠComparable < Duration > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġvalue : ĠLong Ġget () Ġ= Ġraw Value Ġshr Ġ 1 ĊĠĠĠ Ġprivate Ġinline Ġval Ġunit Discriminator : ĠInt Ġget () Ġ= Ġraw Value . toInt () Ġand Ġ 1 ĊĠĠĠ Ġprivate Ġfun ĠisIn Nan os () Ġ= Ġunit Discriminator Ġ== Ġ 0 ĊĠĠĠ Ġprivate Ġfun ĠisIn Millis () Ġ= Ġunit Discriminator Ġ== Ġ 1 ĊĠĠĠ Ġprivate Ġval Ġstorage Unit Ġget () Ġ= Ġif Ġ( isIn Nan os ()) ĠDuration Unit . NAN O SECONDS Ġelse ĠDuration Unit . MILLISECONDS ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġdisable Ġassertions Ġin Ġfinal Ġversion ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn Nan os ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ! in Ġ- MAX _ NAN OS .. MAX _ NAN OS ) Ġthrow ĠAssertionError ("$ value Ġns Ġis Ġout Ġof Ġnan oseconds Ġrange ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ! in Ġ- MAX _ M ILL IS .. MAX _ M ILL IS ) Ġthrow ĠAssertionError ("$ value Ġms Ġis Ġout Ġof Ġmilliseconds Ġrange ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġin Ġ- MAX _ NAN OS _ IN _ M ILL IS .. MAX _ NAN OS _ IN _ M ILL IS ) Ġthrow ĠAssertionError ("$ value Ġms Ġis Ġden ormal ized ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġduration Ġequal Ġto Ġexactly Ġ 0 Ġseconds . Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġval ĠZERO : ĠDuration Ġ= ĠDuration ( 0 L ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġduration Ġwhose Ġvalue Ġis Ġpositive Ġinfinity . ĠIt Ġis Ġuseful Ġfor Ġrepresenting Ġtimeouts Ġthat Ġshould Ġnever Ġexpire . Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġval ĠIN FIN ITE : ĠDuration Ġ= Ġduration Of Millis ( MAX _ M ILL IS ) ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠNE G _ INF IN ITE : ĠDuration Ġ= Ġduration Of Millis (- MAX _ M ILL IS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠConverts Ġthe Ġgiven Ġtime Ġduration Ġ[ value ] Ġexpressed Ġin Ġthe Ġspecified Ġ[ source Unit ] Ġinto Ġthe Ġspecified Ġ[ target Unit ]. Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġconvert ( value : ĠDouble , Ġsource Unit : ĠDuration Unit , Ġtarget Unit : ĠDuration Unit ): ĠDouble Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Duration Unit ( value , Ġsource Unit , Ġtarget Unit ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġnan oseconds . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġnan oseconds ( value : ĠInt ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . NAN O SECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġnan oseconds . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġnan oseconds ( value : ĠLong ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . NAN O SECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġnan oseconds . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġprovided Ġ` Double ` Ġ[ value ] Ġis Ġ` NaN `. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġnan oseconds ( value : ĠDouble ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . NAN O SECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġmicro seconds . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġmicro seconds ( value : ĠInt ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . MICRO SECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġmicro seconds . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġmicro seconds ( value : ĠLong ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . MICRO SECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġmicro seconds . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġprovided Ġ` Double ` Ġ[ value ] Ġis Ġ` NaN `. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġmicro seconds ( value : ĠDouble ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . MICRO SECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġmilliseconds . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġmilliseconds ( value : ĠInt ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . MILLISECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġmilliseconds . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġmilliseconds ( value : ĠLong ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . MILLISECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġmilliseconds . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġprovided Ġ` Double ` Ġ[ value ] Ġis Ġ` NaN `. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġmilliseconds ( value : ĠDouble ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . MILLISECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġseconds . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġseconds ( value : ĠInt ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . SECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġseconds . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġseconds ( value : ĠLong ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . SECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġseconds . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġprovided Ġ` Double ` Ġ[ value ] Ġis Ġ` NaN `. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġseconds ( value : ĠDouble ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . SECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġminutes . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġminutes ( value : ĠInt ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . MIN UTES ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġminutes . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġminutes ( value : ĠLong ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . MIN UTES ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġminutes . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġprovided Ġ` Double ` Ġ[ value ] Ġis Ġ` NaN `. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġminutes ( value : ĠDouble ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . MIN UTES ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġhours . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġhours ( value : ĠInt ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . HOUR S ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġhours . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġhours ( value : ĠLong ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . HOUR S ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġhours . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġprovided Ġ` Double ` Ġ[ value ] Ġis Ġ` NaN `. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġhours ( value : ĠDouble ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . HOUR S ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġdays . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġdays ( value : ĠInt ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . DAYS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġdays . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġdays ( value : ĠLong ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . DAYS ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġrepresenting Ġthe Ġspecified Ġ[ value ] Ġnumber Ġof Ġdays . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġprovided Ġ` Double ` Ġ[ value ] Ġis Ġ` NaN `. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġdays ( value : ĠDouble ): ĠDuration Ġ= Ġvalue . to Duration ( Duration Unit . DAYS ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġarithmetic Ġoperators ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġnegative Ġof Ġthis Ġvalue . Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġunary Minus (): ĠDuration Ġ= Ġduration Of (- value , Ġunit Discriminator ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġduration Ġwhose Ġvalue Ġis Ġthe Ġsum Ġof Ġthis Ġand Ġ[ other ] Ġduration Ġvalues . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġoperation Ġresults Ġin Ġan Ġundefined Ġvalue Ġfor Ġthe Ġgiven Ġarguments , ĊĠĠĠĠ Ġ* Ġe . g . Ġwhen Ġadding Ġinfinite Ġdur ations Ġof Ġdifferent Ġsign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġplus ( other : ĠDuration ): ĠDuration Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . isIn finite () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other . is Finite () Ġ|| Ġ( this . raw Value Ġxor Ġother . raw Value Ġ>= Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Sum ming Ġinfinite Ġdur ations Ġof Ġdifferent Ġsigns Ġyields Ġan Ġundefined Ġresult .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . isIn finite () Ġ-> Ġreturn Ġother ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . unit Discriminator Ġ== Ġother . unit Discriminator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġthis . value Ġ+ Ġother . value Ġ// Ġnever Ġoverflow s Ġlong , Ġbut Ġcan Ġoverflow Ġlong 6 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Nan os () Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Of Nan os Normalized ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Of Millis Normalized ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . isIn Millis () Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Values Mixed Ranges ( this . value , Ġother . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Values Mixed Ranges ( other . value , Ġthis . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Values Mixed Ranges ( this Millis : ĠLong , Ġother Nan os : ĠLong ): ĠDuration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġother Millis Ġ= Ġnan os To Millis ( other Nan os ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Millis Ġ= Ġthis Millis Ġ+ Ġother Millis ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( result Millis Ġin Ġ- MAX _ NAN OS _ IN _ M ILL IS .. MAX _ NAN OS _ IN _ M ILL IS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Nano Remain der Ġ= Ġother Nan os Ġ- Ġmillis To Nan os ( other Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Of Nan os ( millis To Nan os ( result Millis ) Ġ+ Ġother Nano Remain der ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Of Millis ( result Millis . coerce In (- MAX _ M ILL IS , ĠMAX _ M ILL IS )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġduration Ġwhose Ġvalue Ġis Ġthe Ġdifference Ġbetween Ġthis Ġand Ġ[ other ] Ġduration Ġvalues . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġoperation Ġresults Ġin Ġan Ġundefined Ġvalue Ġfor Ġthe Ġgiven Ġarguments , ĊĠĠĠĠ Ġ* Ġe . g . Ġwhen Ġsubtract ing Ġinfinite Ġdur ations Ġof Ġthe Ġsame Ġsign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġminus ( other : ĠDuration ): ĠDuration Ġ= Ġthis Ġ+ Ġ(- other ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġduration Ġwhose Ġvalue Ġis Ġthis Ġduration Ġvalue Ġmultip lied Ġby Ġthe Ġgiven Ġ[ scale ] Ġnumber . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġoperation Ġresults Ġin Ġan Ġundefined Ġvalue Ġfor Ġthe Ġgiven Ġarguments , ĊĠĠĠĠ Ġ* Ġe . g . Ġwhen Ġmultiply ing Ġan Ġinfinite Ġduration Ġby Ġzero . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġtimes ( scale : ĠInt ): ĠDuration Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn finite ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ== Ġ 0 Ġ-> Ġthrow ĠIllegalArgumentException (" Multiply ing Ġinfinite Ġduration Ġby Ġzero Ġyields Ġan Ġundefined Ġresult .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ> Ġ 0 Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ- this ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( scale Ġ== Ġ 0 ) Ġreturn ĠZERO ĊĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġvalue Ġ* Ġscale ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( isIn Nan os ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġin Ġ( MAX _ NAN OS Ġ/ ĠInt . MIN _ VALUE ) .. (- MAX _ NAN OS Ġ/ ĠInt . MIN _ VALUE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcan 't Ġoverflow Ġnan os Ġrange Ġfor Ġany Ġscale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Of Nan os ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ/ Ġscale Ġ== Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Of Nan os Normalized ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmillis Ġ= Ġnan os To Millis ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrem Nan os Ġ= Ġvalue Ġ- Ġmillis To Nan os ( millis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Millis Ġ= Ġmillis Ġ* Ġscale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Millis Ġ= Ġresult Millis Ġ+ Ġnan os To Millis ( rem Nan os Ġ* Ġscale ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Millis Ġ/ Ġscale Ġ== Ġmillis Ġ&& Ġtotal Millis Ġxor Ġresult Millis Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Of Millis ( total Millis . coerce In (- MAX _ M ILL IS .. MAX _ M ILL IS )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . sign Ġ* Ġscale . sign Ġ> Ġ 0 ) ĠIN FIN ITE Ġelse ĠNE G _ INF IN ITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ/ Ġscale Ġ== Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Of Millis ( result . coerce In (- MAX _ M ILL IS .. MAX _ M ILL IS )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . sign Ġ* Ġscale . sign Ġ> Ġ 0 ) ĠIN FIN ITE Ġelse ĠNE G _ INF IN ITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġduration Ġwhose Ġvalue Ġis Ġthis Ġduration Ġvalue Ġmultip lied Ġby Ġthe Ġgiven Ġ[ scale ] Ġnumber . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġoperation Ġresults Ġin Ġan Ġundefined Ġvalue Ġfor Ġthe Ġgiven Ġarguments , ĊĠĠĠĠ Ġ* Ġe . g . Ġwhen Ġmultiply ing Ġan Ġinfinite Ġduration Ġby Ġzero . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġtimes ( scale : ĠDouble ): ĠDuration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġint Scale Ġ= Ġscale . round ToInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( int Scale . toDouble () Ġ== Ġscale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtimes ( int Scale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġunit Ġ= Ġstorage Unit ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġto Double ( unit ) Ġ* Ġscale ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . to Duration ( unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġduration Ġwhose Ġvalue Ġis Ġthis Ġduration Ġvalue Ġdivided Ġby Ġthe Ġgiven Ġ[ scale ] Ġnumber . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġoperation Ġresults Ġin Ġan Ġundefined Ġvalue Ġfor Ġthe Ġgiven Ġarguments , ĊĠĠĠĠ Ġ* Ġe . g . Ġwhen Ġdiv iding Ġzero Ġduration Ġby Ġzero . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġdiv ( scale : ĠInt ): ĠDuration Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( scale Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Positive () Ġ-> ĠIN FIN ITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Negative () Ġ-> ĠNE G _ INF IN ITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Div iding Ġzero Ġduration Ġby Ġzero Ġyields Ġan Ġundefined Ġresult .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn Nan os ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġduration Of Nan os ( value Ġ/ Ġscale ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isIn finite ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ* Ġscale . sign ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġvalue Ġ/ Ġscale ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġin Ġ- MAX _ NAN OS _ IN _ M ILL IS .. MAX _ NAN OS _ IN _ M ILL IS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrem Ġ= Ġmillis To Nan os ( value Ġ- Ġ( result Ġ* Ġscale )) Ġ/ Ġscale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġduration Of Nan os ( millis To Nan os ( result ) Ġ+ Ġrem ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġduration Of Millis ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġduration Ġwhose Ġvalue Ġis Ġthis Ġduration Ġvalue Ġdivided Ġby Ġthe Ġgiven Ġ[ scale ] Ġnumber . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġoperation Ġresults Ġin Ġan Ġundefined Ġvalue Ġfor Ġthe Ġgiven Ġarguments , ĊĠĠĠĠ Ġ* Ġe . g . Ġwhen Ġdiv iding Ġan Ġinfinite Ġduration Ġby Ġinfinity Ġor Ġzero Ġduration Ġby Ġzero . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġdiv ( scale : ĠDouble ): ĠDuration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġint Scale Ġ= Ġscale . round ToInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( int Scale . toDouble () Ġ== Ġscale Ġ&& Ġint Scale Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdiv ( int Scale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġunit Ġ= Ġstorage Unit ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġto Double ( unit ) Ġ/ Ġscale ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . to Duration ( unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġa Ġnumber Ġthat Ġis Ġthe Ġratio Ġof Ġthis Ġand Ġ[ other ] Ġduration Ġvalues . Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġdiv ( other : ĠDuration ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġco ar ser Unit Ġ= Ġmax Of ( this . storage Unit , Ġother . storage Unit ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . toDouble ( co ar ser Unit ) Ġ/ Ġother . toDouble ( co ar ser Unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġtrue , Ġif Ġthe Ġduration Ġvalue Ġis Ġless Ġthan Ġzero . Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġis Negative (): ĠBoolean Ġ= Ġraw Value Ġ< Ġ 0 ĊĊĠĠĠ Ġ/** ĠReturns Ġtrue , Ġif Ġthe Ġduration Ġvalue Ġis Ġgreater Ġthan Ġzero . Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġis Positive (): ĠBoolean Ġ= Ġraw Value Ġ> Ġ 0 ĊĊĠĠĠ Ġ/** ĠReturns Ġtrue , Ġif Ġthe Ġduration Ġvalue Ġis Ġinfinite . Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġis Infinite (): ĠBoolean Ġ= Ġraw Value Ġ== ĠIN FIN ITE . raw Value Ġ|| Ġraw Value Ġ== ĠNE G _ INF IN ITE . raw Value ĊĊĠĠĠ Ġ/** ĠReturns Ġtrue , Ġif Ġthe Ġduration Ġvalue Ġis Ġfinite . Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġis Finite (): ĠBoolean Ġ= Ġ! isIn finite () ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġabsolute Ġvalue Ġof Ġthis Ġvalue . ĠThe Ġreturned Ġvalue Ġis Ġalways Ġnon - negative . Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġabsolute Value : ĠDuration Ġget () Ġ= Ġif Ġ( is Negative ()) Ġ- this Ġelse Ġthis ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠDuration ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompare Bits Ġ= Ġthis . raw Value Ġxor Ġother . raw Value ĊĠĠĠĠĠĠĠ Ġif Ġ( compare Bits Ġ< Ġ 0 Ġ|| Ġcompare Bits . toInt () Ġand Ġ 1 Ġ== Ġ 0 ) Ġ// Ġdifferent Ġsigns Ġor Ġsame Ġsign / same Ġrange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . raw Value . compareTo ( other . raw Value ) ĊĠĠĠĠĠĠĠ Ġ// Ġsame Ġsign / different Ġranges ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġthis . unit Discriminator Ġ- Ġother . unit Discriminator Ġ// Ġcompare Ġranges ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Negative ()) Ġ- r Ġelse Ġr ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Ġsplitting Ġto Ġcomponents ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpl its Ġthis Ġduration Ġinto Ġdays , Ġhours , Ġminutes , Ġseconds , Ġand Ġnan oseconds Ġand Ġexecutes Ġthe Ġgiven Ġ[ action ] Ġwith Ġthese Ġcomponents . ĊĠĠĠĠ Ġ* ĠThe Ġresult Ġof Ġ[ action ] Ġis Ġreturned Ġas Ġthe Ġresult Ġof Ġthis Ġfunction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ- Ġ` nan oseconds ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġnan oseconds Ġin Ġthis Ġduration , Ġand Ġits Ġabsolute Ġvalue Ġis Ġless Ġthan Ġ 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ; ĊĠĠĠĠ Ġ* Ġ- Ġ` seconds ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġseconds Ġin Ġthis Ġduration , Ġand Ġits Ġabsolute Ġvalue Ġis Ġless Ġthan Ġ 6 0 ; ĊĠĠĠĠ Ġ* Ġ- Ġ` minutes ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġminutes Ġin Ġthis Ġduration , Ġand Ġits Ġabsolute Ġvalue Ġis Ġless Ġthan Ġ 6 0 ; ĊĠĠĠĠ Ġ* Ġ- Ġ` hours ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġhours Ġin Ġthis Ġduration , Ġand Ġits Ġabsolute Ġvalue Ġis Ġless Ġthan Ġ 2 4 ; ĊĠĠĠĠ Ġ* Ġ- Ġ` days ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġdays Ġin Ġthis Ġduration . ĊĠĠĠĠ Ġ* ĠĠ ĠIf Ġthe Ġvalue Ġdoesn 't Ġfit Ġin Ġ[ Int ] Ġrange , Ġi . e . Ġit 's Ġgreater Ġthan Ġ[ Int . MAX _ VALUE ] Ġor Ġless Ġthan Ġ[ Int . MIN _ VALUE ], ĊĠĠĠĠ Ġ* ĠĠ Ġit Ġis Ġco er ced Ġinto Ġthat Ġrange . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġinline Ġfun Ġ< T > Ġto Components ( action : Ġ( days : ĠInt , Ġhours : ĠInt , Ġminutes : ĠInt , Ġseconds : ĠInt , Ġnan oseconds : ĠInt ) Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġcontract Ġ{ Ġcalls In Place ( action , ĠInvocation Kind . EX ACT LY _ ON CE ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġaction ( toInt ( Duration Unit . DAYS ), Ġhours Component , Ġminutes Component , Ġseconds Component , Ġnan oseconds Component ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpl its Ġthis Ġduration Ġinto Ġhours , Ġminutes , Ġseconds , Ġand Ġnan oseconds Ġand Ġexecutes Ġthe Ġgiven Ġ[ action ] Ġwith Ġthese Ġcomponents . ĊĠĠĠĠ Ġ* ĠThe Ġresult Ġof Ġ[ action ] Ġis Ġreturned Ġas Ġthe Ġresult Ġof Ġthis Ġfunction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ- Ġ` nan oseconds ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġnan oseconds Ġin Ġthis Ġduration , Ġand Ġits Ġabsolute Ġvalue Ġis Ġless Ġthan Ġ 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ; ĊĠĠĠĠ Ġ* Ġ- Ġ` seconds ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġseconds Ġin Ġthis Ġduration , Ġand Ġits Ġabsolute Ġvalue Ġis Ġless Ġthan Ġ 6 0 ; ĊĠĠĠĠ Ġ* Ġ- Ġ` minutes ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġminutes Ġin Ġthis Ġduration , Ġand Ġits Ġabsolute Ġvalue Ġis Ġless Ġthan Ġ 6 0 ; ĊĠĠĠĠ Ġ* Ġ- Ġ` hours ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġhours Ġin Ġthis Ġduration . ĊĠĠĠĠ Ġ* ĠĠ ĠIf Ġthe Ġvalue Ġdoesn 't Ġfit Ġin Ġ[ Int ] Ġrange , Ġi . e . Ġit 's Ġgreater Ġthan Ġ[ Int . MAX _ VALUE ] Ġor Ġless Ġthan Ġ[ Int . MIN _ VALUE ], ĊĠĠĠĠ Ġ* ĠĠ Ġit Ġis Ġco er ced Ġinto Ġthat Ġrange . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġinline Ġfun Ġ< T > Ġto Components ( action : Ġ( hours : ĠInt , Ġminutes : ĠInt , Ġseconds : ĠInt , Ġnan oseconds : ĠInt ) Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġcontract Ġ{ Ġcalls In Place ( action , ĠInvocation Kind . EX ACT LY _ ON CE ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġaction ( toInt ( Duration Unit . HOUR S ), Ġminutes Component , Ġseconds Component , Ġnan oseconds Component ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpl its Ġthis Ġduration Ġinto Ġminutes , Ġseconds , Ġand Ġnan oseconds Ġand Ġexecutes Ġthe Ġgiven Ġ[ action ] Ġwith Ġthese Ġcomponents . ĊĠĠĠĠ Ġ* ĠThe Ġresult Ġof Ġ[ action ] Ġis Ġreturned Ġas Ġthe Ġresult Ġof Ġthis Ġfunction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ- Ġ` nan oseconds ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġnan oseconds Ġin Ġthis Ġduration , Ġand Ġits Ġabsolute Ġvalue Ġis Ġless Ġthan Ġ 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ; ĊĠĠĠĠ Ġ* Ġ- Ġ` seconds ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġseconds Ġin Ġthis Ġduration , Ġand Ġits Ġabsolute Ġvalue Ġis Ġless Ġthan Ġ 6 0 ; ĊĠĠĠĠ Ġ* Ġ- Ġ` minutes ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġminutes Ġin Ġthis Ġduration . ĊĠĠĠĠ Ġ* ĠĠ ĠIf Ġthe Ġvalue Ġdoesn 't Ġfit Ġin Ġ[ Int ] Ġrange , Ġi . e . Ġit 's Ġgreater Ġthan Ġ[ Int . MAX _ VALUE ] Ġor Ġless Ġthan Ġ[ Int . MIN _ VALUE ], ĊĠĠĠĠ Ġ* ĠĠ Ġit Ġis Ġco er ced Ġinto Ġthat Ġrange . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġinline Ġfun Ġ< T > Ġto Components ( action : Ġ( minutes : ĠInt , Ġseconds : ĠInt , Ġnan oseconds : ĠInt ) Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġcontract Ġ{ Ġcalls In Place ( action , ĠInvocation Kind . EX ACT LY _ ON CE ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġaction ( toInt ( Duration Unit . MIN UTES ), Ġseconds Component , Ġnan oseconds Component ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpl its Ġthis Ġduration Ġinto Ġseconds , Ġand Ġnan oseconds Ġand Ġexecutes Ġthe Ġgiven Ġ[ action ] Ġwith Ġthese Ġcomponents . ĊĠĠĠĠ Ġ* ĠThe Ġresult Ġof Ġ[ action ] Ġis Ġreturned Ġas Ġthe Ġresult Ġof Ġthis Ġfunction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ- Ġ` nan oseconds ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġnan oseconds Ġin Ġthis Ġduration , Ġand Ġits Ġabsolute Ġvalue Ġis Ġless Ġthan Ġ 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ; ĊĠĠĠĠ Ġ* Ġ- Ġ` seconds ` Ġrepresents Ġthe Ġwhole Ġnumber Ġof Ġseconds Ġin Ġthis Ġduration . ĊĠĠĠĠ Ġ* ĠĠ ĠIf Ġthe Ġvalue Ġdoesn 't Ġfit Ġin Ġ[ Long ] Ġrange , Ġi . e . Ġit 's Ġgreater Ġthan Ġ[ Long . MAX _ VALUE ] Ġor Ġless Ġthan Ġ[ Long . MIN _ VALUE ], ĊĠĠĠĠ Ġ* ĠĠ Ġit Ġis Ġco er ced Ġinto Ġthat Ġrange . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġinline Ġfun Ġ< T > Ġto Components ( action : Ġ( seconds : ĠLong , Ġnan oseconds : ĠInt ) Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġcontract Ġ{ Ġcalls In Place ( action , ĠInvocation Kind . EX ACT LY _ ON CE ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġaction ( in Whole Seconds , Ġnan oseconds Component ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Published Api ĊĠĠĠ Ġinternal Ġval Ġhours Component : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( isIn finite ()) Ġ 0 Ġelse Ġ( in Whole Hours Ġ% Ġ 2 4 ). toInt () ĊĊĠĠĠ Ġ@ Published Api ĊĠĠĠ Ġinternal Ġval Ġminutes Component : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( isIn finite ()) Ġ 0 Ġelse Ġ( in Whole Minutes Ġ% Ġ 6 0 ). toInt () ĊĊĠĠĠ Ġ@ Published Api ĊĠĠĠ Ġinternal Ġval Ġseconds Component : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( isIn finite ()) Ġ 0 Ġelse Ġ( in Whole Seconds Ġ% Ġ 6 0 ). toInt () ĊĊĠĠĠ Ġ@ Published Api ĊĠĠĠ Ġinternal Ġval Ġnan oseconds Component : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Infinite () Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Millis () Ġ-> Ġmillis To Nan os ( value Ġ% Ġ 1 _ 0 0 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ( value Ġ% Ġ 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Ġconversion Ġto Ġunits ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Double ] Ġnumber Ġof Ġthe Ġspecified Ġ[ unit ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAn Ġinfinite Ġduration Ġvalue Ġis Ġconverted Ġeither Ġto Ġ[ Double . POSITIVE _ INFINITY ] Ġor Ġ[ Double . NEGATIVE _ INFINITY ] Ġdepending Ġon Ġits Ġsign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġto Double ( unit : ĠDuration Unit ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( raw Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIN FIN ITE . raw Value Ġ-> ĠDouble . POSITIVE _ INFINITY ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNE G _ INF IN ITE . raw Value Ġ-> ĠDouble . NEGATIVE _ INFINITY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġwhether Ġit 's Ġok Ġto Ġconvert Ġto ĠDouble Ġbefore Ġscaling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Duration Unit ( value . toDouble (), Ġstorage Unit , Ġunit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Long ] Ġnumber Ġof Ġthe Ġspecified Ġ[ unit ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġresult Ġdoesn 't Ġfit Ġin Ġthe Ġrange Ġof Ġ[ Long ] Ġtype , Ġit Ġis Ġco er ced Ġinto Ġthat Ġrange : ĊĠĠĠĠ Ġ* Ġ- Ġ[ Long . MIN _ VALUE ] Ġis Ġreturned Ġif Ġit 's Ġless Ġthan Ġ` Long . MIN _ VALUE `, ĊĠĠĠĠ Ġ* Ġ- Ġ[ Long . MAX _ VALUE ] Ġis Ġreturned Ġif Ġit 's Ġgreater Ġthan Ġ` Long . MAX _ VALUE `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAn Ġinfinite Ġduration Ġvalue Ġis Ġconverted Ġeither Ġto Ġ[ Long . MAX _ VALUE ] Ġor Ġ[ Long . MIN _ VALUE ] Ġdepending Ġon Ġits Ġsign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġto Long ( unit : ĠDuration Unit ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( raw Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIN FIN ITE . raw Value Ġ-> ĠLong . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNE G _ INF IN ITE . raw Value Ġ-> ĠLong . MIN _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġconvert Duration Unit ( value , Ġstorage Unit , Ġunit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġan Ġ[ Int ] Ġnumber Ġof Ġthe Ġspecified Ġ[ unit ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġresult Ġdoesn 't Ġfit Ġin Ġthe Ġrange Ġof Ġ[ Int ] Ġtype , Ġit Ġis Ġco er ced Ġinto Ġthat Ġrange : ĊĠĠĠĠ Ġ* Ġ- Ġ[ Int . MIN _ VALUE ] Ġis Ġreturned Ġif Ġit 's Ġless Ġthan Ġ` Int . MIN _ VALUE `, ĊĠĠĠĠ Ġ* Ġ- Ġ[ Int . MAX _ VALUE ] Ġis Ġreturned Ġif Ġit 's Ġgreater Ġthan Ġ` Int . MAX _ VALUE `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAn Ġinfinite Ġduration Ġvalue Ġis Ġconverted Ġeither Ġto Ġ[ Int . MAX _ VALUE ] Ġor Ġ[ Int . MIN _ VALUE ] Ġdepending Ġon Ġits Ġsign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġto Int ( unit : ĠDuration Unit ): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġto Long ( unit ). coerce In ( Int . MIN _ VALUE . to Long (), ĠInt . MAX _ VALUE . to Long ()). toInt () ĊĊĠĠĠ Ġ/** ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Double ] Ġnumber Ġof Ġdays . Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" Use Ġin Whole Days Ġproperty Ġinstead Ġor Ġconvert Ġto Double ( DAYS ) Ġif Ġa Ġdouble Ġvalue Ġis Ġrequired .", ĠReplace With (" toDouble ( Duration Unit . DAYS ) ")) ĊĠĠĠ Ġpublic Ġval Ġin Days : ĠDouble Ġget () Ġ= Ġto Double ( Duration Unit . DAYS ) ĊĊĠĠĠ Ġ/** ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Double ] Ġnumber Ġof Ġhours . Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" Use Ġin Whole Hours Ġproperty Ġinstead Ġor Ġconvert Ġto Double ( HOUR S ) Ġif Ġa Ġdouble Ġvalue Ġis Ġrequired .", ĠReplace With (" toDouble ( Duration Unit . HOUR S ) ")) ĊĠĠĠ Ġpublic Ġval Ġin Hours : ĠDouble Ġget () Ġ= Ġto Double ( Duration Unit . HOUR S ) ĊĊĠĠĠ Ġ/** ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Double ] Ġnumber Ġof Ġminutes . Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" Use Ġin Whole Minutes Ġproperty Ġinstead Ġor Ġconvert Ġto Double ( MIN UTES ) Ġif Ġa Ġdouble Ġvalue Ġis Ġrequired .", ĠReplace With (" toDouble ( Duration Unit . MIN UTES ) ")) ĊĠĠĠ Ġpublic Ġval Ġin Minutes : ĠDouble Ġget () Ġ= Ġto Double ( Duration Unit . MIN UTES ) ĊĊĠĠĠ Ġ/** ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Double ] Ġnumber Ġof Ġseconds . Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" Use Ġin Whole Seconds Ġproperty Ġinstead Ġor Ġconvert Ġto Double ( SECONDS ) Ġif Ġa Ġdouble Ġvalue Ġis Ġrequired .", ĠReplace With (" toDouble ( Duration Unit . SECONDS ) ")) ĊĠĠĠ Ġpublic Ġval Ġin Seconds : ĠDouble Ġget () Ġ= Ġto Double ( Duration Unit . SECONDS ) ĊĊĠĠĠ Ġ/** ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Double ] Ġnumber Ġof Ġmilliseconds . Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" Use Ġin Whole Milliseconds Ġproperty Ġinstead Ġor Ġconvert Ġto Double ( MILLISECONDS ) Ġif Ġa Ġdouble Ġvalue Ġis Ġrequired .", ĠReplace With (" toDouble ( Duration Unit . MILLISECONDS ) ")) ĊĠĠĠ Ġpublic Ġval Ġin Milliseconds : ĠDouble Ġget () Ġ= Ġto Double ( Duration Unit . MILLISECONDS ) ĊĊĠĠĠ Ġ/** ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Double ] Ġnumber Ġof Ġmicro seconds . Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" Use Ġin Whole Micro seconds Ġproperty Ġinstead Ġor Ġconvert Ġto Double ( MICRO SECONDS ) Ġif Ġa Ġdouble Ġvalue Ġis Ġrequired .", ĠReplace With (" toDouble ( Duration Unit . MICRO SECONDS ) ")) ĊĠĠĠ Ġpublic Ġval Ġin Micro seconds : ĠDouble Ġget () Ġ= Ġto Double ( Duration Unit . MICRO SECONDS ) ĊĊĠĠĠ Ġ/** ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Double ] Ġnumber Ġof Ġnan oseconds . Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" Use Ġin Whole Nan oseconds Ġproperty Ġinstead Ġor Ġconvert Ġto Double ( NAN O SECONDS ) Ġif Ġa Ġdouble Ġvalue Ġis Ġrequired .", ĠReplace With (" toDouble ( Duration Unit . NAN O SECONDS ) ")) ĊĠĠĠ Ġpublic Ġval Ġin Nan oseconds : ĠDouble Ġget () Ġ= Ġto Double ( Duration Unit . NAN O SECONDS ) ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Long ] Ġnumber Ġof Ġdays . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAn Ġinfinite Ġduration Ġvalue Ġis Ġconverted Ġeither Ġto Ġ[ Long . MAX _ VALUE ] Ġor Ġ[ Long . MIN _ VALUE ] Ġdepending Ġon Ġits Ġsign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠ Ġpublic Ġval Ġin Whole Days : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġto Long ( Duration Unit . DAYS ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Long ] Ġnumber Ġof Ġhours . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAn Ġinfinite Ġduration Ġvalue Ġis Ġconverted Ġeither Ġto Ġ[ Long . MAX _ VALUE ] Ġor Ġ[ Long . MIN _ VALUE ] Ġdepending Ġon Ġits Ġsign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠ Ġpublic Ġval Ġin Whole Hours : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġto Long ( Duration Unit . HOUR S ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Long ] Ġnumber Ġof Ġminutes . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAn Ġinfinite Ġduration Ġvalue Ġis Ġconverted Ġeither Ġto Ġ[ Long . MAX _ VALUE ] Ġor Ġ[ Long . MIN _ VALUE ] Ġdepending Ġon Ġits Ġsign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠ Ġpublic Ġval Ġin Whole Minutes : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġto Long ( Duration Unit . MIN UTES ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Long ] Ġnumber Ġof Ġseconds . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAn Ġinfinite Ġduration Ġvalue Ġis Ġconverted Ġeither Ġto Ġ[ Long . MAX _ VALUE ] Ġor Ġ[ Long . MIN _ VALUE ] Ġdepending Ġon Ġits Ġsign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠ Ġpublic Ġval Ġin Whole Seconds : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġto Long ( Duration Unit . SECONDS ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Long ] Ġnumber Ġof Ġmilliseconds . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAn Ġinfinite Ġduration Ġvalue Ġis Ġconverted Ġeither Ġto Ġ[ Long . MAX _ VALUE ] Ġor Ġ[ Long . MIN _ VALUE ] Ġdepending Ġon Ġits Ġsign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠ Ġpublic Ġval Ġin Whole Milliseconds : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( isIn Millis () Ġ&& Ġis Finite ()) Ġvalue Ġelse Ġto Long ( Duration Unit . MILLISECONDS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Long ] Ġnumber Ġof Ġmicro seconds . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġresult Ġdoesn 't Ġfit Ġin Ġthe Ġrange Ġof Ġ[ Long ] Ġtype , Ġit Ġis Ġco er ced Ġinto Ġthat Ġrange : ĊĠĠĠĠ Ġ* Ġ- Ġ[ Long . MIN _ VALUE ] Ġis Ġreturned Ġif Ġit 's Ġless Ġthan Ġ` Long . MIN _ VALUE `, ĊĠĠĠĠ Ġ* Ġ- Ġ[ Long . MAX _ VALUE ] Ġis Ġreturned Ġif Ġit 's Ġgreater Ġthan Ġ` Long . MAX _ VALUE `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAn Ġinfinite Ġduration Ġvalue Ġis Ġconverted Ġeither Ġto Ġ[ Long . MAX _ VALUE ] Ġor Ġ[ Long . MIN _ VALUE ] Ġdepending Ġon Ġits Ġsign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠ Ġpublic Ġval Ġin Whole Micro seconds : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġto Long ( Duration Unit . MICRO SECONDS ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Long ] Ġnumber Ġof Ġnan oseconds . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġresult Ġdoesn 't Ġfit Ġin Ġthe Ġrange Ġof Ġ[ Long ] Ġtype , Ġit Ġis Ġco er ced Ġinto Ġthat Ġrange : ĊĠĠĠĠ Ġ* Ġ- Ġ[ Long . MIN _ VALUE ] Ġis Ġreturned Ġif Ġit 's Ġless Ġthan Ġ` Long . MIN _ VALUE `, ĊĠĠĠĠ Ġ* Ġ- Ġ[ Long . MAX _ VALUE ] Ġis Ġreturned Ġif Ġit 's Ġgreater Ġthan Ġ` Long . MAX _ VALUE `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAn Ġinfinite Ġduration Ġvalue Ġis Ġconverted Ġeither Ġto Ġ[ Long . MAX _ VALUE ] Ġor Ġ[ Long . MIN _ VALUE ] Ġdepending Ġon Ġits Ġsign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Since Kotlin (" 1 . 5 ") ĊĠĠĠ Ġpublic Ġval Ġin Whole Nan oseconds : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Nan os () Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ> ĠLong . MAX _ VALUE Ġ/ ĠN AN OS _ IN _ M ILL IS Ġ-> ĠLong . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ< ĠLong . MIN _ VALUE Ġ/ ĠN AN OS _ IN _ M ILL IS Ġ-> ĠLong . MIN _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmillis To Nan os ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġshortcuts ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Long ] Ġnumber Ġof Ġnan oseconds . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġvalue Ġdoesn 't Ġfit Ġin Ġthe Ġrange Ġof Ġ[ Long ] Ġtype , Ġit Ġis Ġco er ced Ġinto Ġthat Ġrange , Ġsee Ġthe Ġconversion Ġ[ Double . to Long ] Ġfor Ġdetails . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġrange Ġof Ġdur ations Ġthat Ġcan Ġbe Ġexpressed Ġas Ġa Ġ` Long ` Ġnumber Ġof Ġnan oseconds Ġis Ġapproximately ĠÂ ± 2 9 2 Ġyears . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" Use Ġin Whole Nan oseconds Ġproperty Ġinstead .", ĠReplace With (" this . in Whole Nan oseconds ")) ĊĠĠĠ Ġpublic Ġfun Ġto Long Nan oseconds (): ĠLong Ġ= Ġin Whole Nan oseconds ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġvalue Ġof Ġthis Ġduration Ġexpressed Ġas Ġa Ġ[ Long ] Ġnumber Ġof Ġmilliseconds . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġis Ġco er ced Ġto Ġthe Ġrange Ġof Ġ[ Long ] Ġtype , Ġif Ġit Ġdoesn 't Ġfit Ġin Ġthat Ġrange , Ġsee Ġthe Ġconversion Ġ[ Double . to Long ] Ġfor Ġdetails . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġrange Ġof Ġdur ations Ġthat Ġcan Ġbe Ġexpressed Ġas Ġa Ġ` Long ` Ġnumber Ġof Ġmilliseconds Ġis Ġapproximately ĠÂ ± 2 9 2 Ġmillion Ġyears . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Deprecated (" Use Ġin Whole Milliseconds Ġproperty Ġinstead .", ĠReplace With (" this . in Whole Milliseconds ")) ĊĠĠĠ Ġpublic Ġfun Ġto Long Milliseconds (): ĠLong Ġ= Ġin Whole Milliseconds ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġstring Ġrepresentation Ġof Ġthis Ġduration Ġvalue Ġexpressed Ġin Ġthe Ġunit Ġwhich Ġyields Ġthe Ġmost Ġcompact Ġand Ġreadable Ġnumber Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSpecial Ġcases : ĊĠĠĠĠ Ġ* Ġ Ġ- Ġzero Ġduration Ġis Ġformatted Ġas Ġ`" 0 s "` ĊĠĠĠĠ Ġ* Ġ Ġ- Ġthe Ġinfinite Ġduration Ġis Ġformatted Ġas Ġ`" Infinity "` Ġwithout Ġunit ĊĠĠĠĠ Ġ* Ġ Ġ- Ġvery Ġsmall Ġdur ations Ġ( less Ġthan Ġ 1 e - 1 5 Ġs ) Ġare Ġexpressed Ġin Ġseconds Ġand Ġformatted Ġin Ġscientific Ġnotation ĊĠĠĠĠ Ġ* Ġ Ġ- Ġvery Ġbig Ġdur ations Ġ( more Ġthan Ġ 1 e + 7 Ġdays ) Ġare Ġexpressed Ġin Ġdays Ġand Ġformatted Ġin Ġscientific Ġnotation ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġvalue Ġof Ġduration Ġin Ġthe Ġautomatically Ġdetermined Ġunit Ġfollowed Ġby Ġthat Ġunit Ġabbre vi ated Ġname : Ġ` d `, Ġ` h `, Ġ` m `, Ġ` s `, Ġ` ms `, Ġ` us `, Ġor Ġ` ns `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ sample Ġsamples . time . Dur ations . toString Default ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġwhen Ġ( raw Value ) Ġ{ ĊĠĠĠĠĠĠĠĠ 0 L Ġ-> Ġ" 0 s " ĊĠĠĠĠĠĠĠ ĠIN FIN ITE . raw Value Ġ-> Ġ" Infinity " ĊĠĠĠĠĠĠĠ ĠNE G _ INF IN ITE . raw Value Ġ-> Ġ"- Infinity " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabs Ns Ġ= Ġabsolute Value . toDouble ( Duration Unit . NAN O SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscientific Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmax Decimal s Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunit Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs Ns Ġ< Ġ 1 e - 6 Ġ-> ĠDuration Unit . SECONDS . also Ġ{ Ġscientific Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs Ns Ġ< Ġ 1 Ġ-> ĠDuration Unit . NAN O SECONDS . also Ġ{ Ġmax Decimal s Ġ= Ġ 7 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs Ns Ġ< Ġ 1 e 3 Ġ-> ĠDuration Unit . NAN O SECONDS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs Ns Ġ< Ġ 1 e 6 Ġ-> ĠDuration Unit . MICRO SECONDS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs Ns Ġ< Ġ 1 e 9 Ġ-> ĠDuration Unit . MILLISECONDS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs Ns Ġ< Ġ 1 0 0 0 e 9 Ġ-> ĠDuration Unit . SECONDS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs Ns Ġ< Ġ 6 0 _ 0 0 0 e 9 Ġ-> ĠDuration Unit . MIN UTES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs Ns Ġ< Ġ 3 6 0 0 _ 0 0 0 e 9 Ġ-> ĠDuration Unit . HOUR S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs Ns Ġ< Ġ 8 6 4 0 0 e 9 Ġ* Ġ 1 e 7 Ġ-> ĠDuration Unit . DAYS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠDuration Unit . DAYS . also Ġ{ Ġscientific Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġto Double ( unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscientific Ġ-> Ġformat Sc ientific ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Decimal s Ġ> Ġ 0 Ġ-> Ġformat Up To Decimal s ( value , Ġmax Decimal s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġformat To Exact Decimal s ( value , Ġprecision ( abs ( value ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ+ Ġunit . short Name () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprecision ( value : ĠDouble ): ĠInt Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ< Ġ 1 Ġ-> Ġ 3 ĊĠĠĠĠĠĠĠ Ġvalue Ġ< Ġ 1 0 Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠ Ġvalue Ġ< Ġ 1 0 0 Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġstring Ġrepresentation Ġof Ġthis Ġduration Ġvalue Ġexpressed Ġin Ġthe Ġgiven Ġ[ unit ] ĊĠĠĠĠ Ġ* Ġand Ġformatted Ġwith Ġthe Ġspecified Ġ[ decimals ] Ġnumber Ġof Ġdigits Ġafter Ġdecimal Ġpoint . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSpecial Ġcases : ĊĠĠĠĠ Ġ* Ġ Ġ- Ġthe Ġinfinite Ġduration Ġis Ġformatted Ġas Ġ`" Infinity "` Ġwithout Ġunit ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġvalue Ġof Ġduration Ġin Ġthe Ġspecified Ġ[ unit ] Ġfollowed Ġby Ġthat Ġunit Ġabbre vi ated Ġname : Ġ` d `, Ġ` h `, Ġ` m `, Ġ` s `, Ġ` ms `, Ġ` us `, Ġor Ġ` ns `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġ[ decimals ] Ġis Ġless Ġthan Ġzero . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ sample Ġsamples . time . Dur ations . toString Decimal s ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun ĠtoString ( unit : ĠDuration Unit , Ġdecimals : ĠInt Ġ= Ġ 0 ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( decimals Ġ>= Ġ 0 ) Ġ{ Ġ" decimals Ġmust Ġbe Ġnot Ġnegative , Ġbut Ġwas Ġ$ decimals " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnumber Ġ= Ġto Double ( unit ) ĊĠĠĠĠĠĠĠ Ġif Ġ( number . isIn finite ()) Ġreturn Ġnumber . toString () ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabs ( number ) Ġ< Ġ 1 e 1 4 Ġ-> Ġformat To Exact Decimal s ( number , Ġdecimals . coerce At Most ( 1 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġformat Sc ientific ( number ) ĊĠĠĠĠĠĠĠ Ġ} Ġ+ Ġunit . short Name () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan ĠISO - 8 6 0 1 Ġbased Ġstring Ġrepresentation Ġof Ġthis Ġduration . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġreturned Ġvalue Ġis Ġpresented Ġin Ġthe Ġformat Ġ` P Th Hm Ms . f S `, Ġwhere Ġ` h `, Ġ` m `, Ġ` s ` Ġare Ġthe Ġinteger Ġcomponents Ġof Ġthis Ġduration Ġ( see Ġ[ to Components ]) ĊĠĠĠĠ Ġ* Ġand Ġ` f ` Ġis Ġa Ġfraction al Ġpart Ġof Ġsecond . ĠDep ending Ġon Ġthe Ġround ness Ġof Ġthe Ġvalue Ġthe Ġfraction al Ġpart Ġcan Ġbe Ġformatted Ġwith Ġeither ĊĠĠĠĠ Ġ* Ġ 0 , Ġ 3 , Ġ 6 , Ġor Ġ 9 Ġdecimal Ġdigits . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġhours Ġcomponent Ġabsolute Ġvalue Ġof Ġthis Ġduration Ġis Ġgreater Ġthan Ġ[ Int . MAX _ VALUE ], Ġit Ġis Ġreplaced Ġwith Ġ[ Int . MAX _ VALUE ], ĊĠĠĠĠ Ġ* Ġso Ġthe Ġinfinite Ġduration Ġis Ġformatted Ġas Ġ`" PT 2 1 4 7 4 8 3 6 4 7 H ". ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNegative Ġdur ations Ġare Ġindicated Ġwith Ġthe Ġsign Ġ`- ` Ġin Ġthe Ġbeginning Ġof Ġthe Ġreturned Ġstring , Ġfor Ġexample , Ġ`" - PT 5 M 3 0 S " `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ sample Ġsamples . time . Dur ations . to Iso String ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġto Iso String (): ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Negative ()) Ġappend ('- ') ĊĠĠĠĠĠĠĠ Ġappend (" PT ") ĊĠĠĠĠĠĠĠ Ġabsolute Value . to Components Ġ{ Ġhours , Ġminutes , Ġseconds , Ġnan oseconds Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Hours Ġ= Ġhours Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Seconds Ġ= Ġseconds Ġ!= Ġ 0 Ġ|| Ġnan oseconds Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Minutes Ġ= Ġminutes Ġ!= Ġ 0 Ġ|| Ġ( has Seconds Ġ&& Ġhas Hours ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Hours ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( hours ). append (' H ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Minutes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( minutes ). append (' M ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Seconds Ġ|| Ġ(! has Hours Ġ&& Ġ! has Minutes )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( seconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( nan oseconds Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ('.') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn ss Ġ= Ġnan oseconds . toString (). pad Start ( 9 , Ġ' 0 ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnan oseconds Ġ% Ġ 1 _ 0 0 0 _ 0 0 0 Ġ== Ġ 0 Ġ-> Ġappend Range ( nss , Ġ 0 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnan oseconds Ġ% Ġ 1 _ 0 0 0 Ġ== Ġ 0 Ġ-> Ġappend Range ( nss , Ġ 0 , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġappend ( nss ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (' S ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ // Ġconstructing Ġfrom Ġnumber Ġof Ġunits Ċ // Ġextension Ġfunctions Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Int ] Ġnumber Ġof Ġthe Ġspecified Ġ[ unit ]. Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ public Ġfun ĠInt . to Duration ( unit : ĠDuration Unit ): ĠDuration Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( unit Ġ<= ĠDuration Unit . SECONDS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Of Nan os ( convert Duration Unit Overflow ( this . to Long (), Ġunit , ĠDuration Unit . NAN O SECONDS )) ĊĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠ Ġto Long (). to Duration ( unit ) Ċ } Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Long ] Ġnumber Ġof Ġthe Ġspecified Ġ[ unit ]. Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ public Ġfun ĠLong . to Duration ( unit : ĠDuration Unit ): ĠDuration Ġ{ ĊĠĠĠ Ġval Ġmax Ns In Unit Ġ= Ġconvert Duration Unit Overflow ( MAX _ NAN OS , ĠDuration Unit . NAN O SECONDS , Ġunit ) ĊĠĠĠ Ġif Ġ( this Ġin Ġ- max Ns In Unit .. max Ns In Unit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġduration Of Nan os ( convert Duration Unit Overflow ( this , Ġunit , ĠDuration Unit . NAN O SECONDS )) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmillis Ġ= Ġconvert Duration Unit ( this , Ġunit , ĠDuration Unit . MILLISECONDS ) ĊĠĠĠĠĠĠĠ Ġreturn Ġduration Of Millis ( millis . coerce In (- MAX _ M ILL IS , ĠMAX _ M ILL IS )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Double ] Ġnumber Ġof Ġthe Ġspecified Ġ[ unit ]. Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthis Ġ` Double ` Ġvalue Ġis Ġ` NaN `. Ċ Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ public Ġfun ĠDouble . to Duration ( unit : ĠDuration Unit ): ĠDuration Ġ{ ĊĠĠĠ Ġval Ġvalue In Ns Ġ= Ġconvert Duration Unit ( this , Ġunit , ĠDuration Unit . NAN O SECONDS ) ĊĠĠĠ Ġrequire (! value In Ns . isNaN ()) Ġ{ Ġ" Duration Ġvalue Ġcannot Ġbe ĠNaN ." Ġ} ĊĠĠĠ Ġval Ġnan os Ġ= Ġvalue In Ns . to Long () ĊĠĠĠ Ġreturn Ġif Ġ( nan os Ġin Ġ- MAX _ NAN OS .. MAX _ NAN OS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Of Nan os ( nan os ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmillis Ġ= Ġconvert Duration Unit ( this , Ġunit , ĠDuration Unit . MILLISECONDS ). to Long () ĊĠĠĠĠĠĠĠ Ġduration Of Millis Normalized ( millis ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġconstructing Ġfrom Ġnumber Ġof Ġunits Ċ // Ġextension Ġproperties Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Int ] Ġnumber Ġof Ġnan oseconds . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . nan oseconds () Ġfunction Ġinstead .", ĠReplace With (" Duration . nan oseconds ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠInt . nan oseconds Ġget () Ġ= Ġto Duration ( Duration Unit . NAN O SECONDS ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Long ] Ġnumber Ġof Ġnan oseconds . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . nan oseconds () Ġfunction Ġinstead .", ĠReplace With (" Duration . nan oseconds ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠLong . nan oseconds Ġget () Ġ= Ġto Duration ( Duration Unit . NAN O SECONDS ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Double ] Ġnumber Ġof Ġnan oseconds . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthis Ġ` Double ` Ġvalue Ġis Ġ` NaN `. Ċ Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . nan oseconds () Ġfunction Ġinstead .", ĠReplace With (" Duration . nan oseconds ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠDouble . nan oseconds Ġget () Ġ= Ġto Duration ( Duration Unit . NAN O SECONDS ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Int ] Ġnumber Ġof Ġmicro seconds . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . micro seconds () Ġfunction Ġinstead .", ĠReplace With (" Duration . micro seconds ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠInt . micro seconds Ġget () Ġ= Ġto Duration ( Duration Unit . MICRO SECONDS ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Long ] Ġnumber Ġof Ġmicro seconds . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . micro seconds () Ġfunction Ġinstead .", ĠReplace With (" Duration . micro seconds ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠLong . micro seconds Ġget () Ġ= Ġto Duration ( Duration Unit . MICRO SECONDS ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Double ] Ġnumber Ġof Ġmicro seconds . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthis Ġ` Double ` Ġvalue Ġis Ġ` NaN `. Ċ Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . micro seconds () Ġfunction Ġinstead .", ĠReplace With (" Duration . micro seconds ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠDouble . micro seconds Ġget () Ġ= Ġto Duration ( Duration Unit . MICRO SECONDS ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Int ] Ġnumber Ġof Ġmilliseconds . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . milliseconds () Ġfunction Ġinstead .", ĠReplace With (" Duration . milliseconds ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠInt . milliseconds Ġget () Ġ= Ġto Duration ( Duration Unit . MILLISECONDS ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Long ] Ġnumber Ġof Ġmilliseconds . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . milliseconds () Ġfunction Ġinstead .", ĠReplace With (" Duration . milliseconds ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠLong . milliseconds Ġget () Ġ= Ġto Duration ( Duration Unit . MILLISECONDS ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Double ] Ġnumber Ġof Ġmilliseconds . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthis Ġ` Double ` Ġvalue Ġis Ġ` NaN `. Ċ Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . milliseconds () Ġfunction Ġinstead .", ĠReplace With (" Duration . milliseconds ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠDouble . milliseconds Ġget () Ġ= Ġto Duration ( Duration Unit . MILLISECONDS ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Int ] Ġnumber Ġof Ġseconds . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . seconds () Ġfunction Ġinstead .", ĠReplace With (" Duration . seconds ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠInt . seconds Ġget () Ġ= Ġto Duration ( Duration Unit . SECONDS ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Long ] Ġnumber Ġof Ġseconds . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . seconds () Ġfunction Ġinstead .", ĠReplace With (" Duration . seconds ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠLong . seconds Ġget () Ġ= Ġto Duration ( Duration Unit . SECONDS ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Double ] Ġnumber Ġof Ġseconds . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthis Ġ` Double ` Ġvalue Ġis Ġ` NaN `. Ċ Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . seconds () Ġfunction Ġinstead .", ĠReplace With (" Duration . seconds ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠDouble . seconds Ġget () Ġ= Ġto Duration ( Duration Unit . SECONDS ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Int ] Ġnumber Ġof Ġminutes . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . minutes () Ġfunction Ġinstead .", ĠReplace With (" Duration . minutes ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠInt . minutes Ġget () Ġ= Ġto Duration ( Duration Unit . MIN UTES ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Long ] Ġnumber Ġof Ġminutes . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . minutes () Ġfunction Ġinstead .", ĠReplace With (" Duration . minutes ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠLong . minutes Ġget () Ġ= Ġto Duration ( Duration Unit . MIN UTES ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Double ] Ġnumber Ġof Ġminutes . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthis Ġ` Double ` Ġvalue Ġis Ġ` NaN `. Ċ Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . minutes () Ġfunction Ġinstead .", ĠReplace With (" Duration . minutes ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠDouble . minutes Ġget () Ġ= Ġto Duration ( Duration Unit . MIN UTES ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Int ] Ġnumber Ġof Ġhours . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . hours () Ġfunction Ġinstead .", ĠReplace With (" Duration . hours ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠInt . hours Ġget () Ġ= Ġto Duration ( Duration Unit . HOUR S ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Long ] Ġnumber Ġof Ġhours . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . hours () Ġfunction Ġinstead .", ĠReplace With (" Duration . hours ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠLong . hours Ġget () Ġ= Ġto Duration ( Duration Unit . HOUR S ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Double ] Ġnumber Ġof Ġhours . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthis Ġ` Double ` Ġvalue Ġis Ġ` NaN `. Ċ Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . hours () Ġfunction Ġinstead .", ĠReplace With (" Duration . hours ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠDouble . hours Ġget () Ġ= Ġto Duration ( Duration Unit . HOUR S ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Int ] Ġnumber Ġof Ġdays . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . days () Ġfunction Ġinstead .", ĠReplace With (" Duration . days ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠInt . days Ġget () Ġ= Ġto Duration ( Duration Unit . DAYS ) Ċ Ċ /** ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Long ] Ġnumber Ġof Ġdays . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . days () Ġfunction Ġinstead .", ĠReplace With (" Duration . days ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠLong . days Ġget () Ġ= Ġto Duration ( Duration Unit . DAYS ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġ[ Duration ] Ġequal Ġto Ġthis Ġ[ Double ] Ġnumber Ġof Ġdays . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthis Ġ` Double ` Ġvalue Ġis Ġ` NaN `. Ċ Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ Deprecated (" Use ĠDuration . days () Ġfunction Ġinstead .", ĠReplace With (" Duration . days ( this )", Ġ" kotlin . time . Duration ")) Ċ public Ġval ĠDouble . days Ġget () Ġ= Ġto Duration ( Duration Unit . DAYS ) ĊĊ Ċ /** ĠReturns Ġa Ġduration Ġwhose Ġvalue Ġis Ġthe Ġspecified Ġ[ duration ] Ġvalue Ġmultip lied Ġby Ġthis Ġnumber . Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ kotlin . internal . Inline Only Ċ public Ġinline Ġoperator Ġfun ĠInt . times ( duration : ĠDuration ): ĠDuration Ġ= Ġduration Ġ* Ġthis Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġduration Ġwhose Ġvalue Ġis Ġthe Ġspecified Ġ[ duration ] Ġvalue Ġmultip lied Ġby Ġthis Ġnumber . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġoperation Ġresults Ġin Ġa Ġ` NaN ` Ġvalue . Ċ Ġ*/ Ċ @ Since Kotlin (" 1 . 3 ") Ċ @ Experimental Time Ċ @ kotlin . internal . Inline Only Ċ public Ġinline Ġoperator Ġfun ĠDouble . times ( duration : ĠDuration ): ĠDuration Ġ= Ġduration Ġ* Ġthis ĊĊ Ċ // ĠThe Ġranges Ġare Ġchosen Ġso Ġthat Ġthey Ġare : Ċ // Ġ- Ġsymmetric Ġrelative Ġto Ġzero : Ġthis Ġgreatly Ġsimpl ifies Ġoperations Ġwith Ġsign , Ġe . g . Ġunary Minus Ġand Ġminus . Ċ // Ġ- Ġnon - over lapping , Ġbut Ġadjacent : Ġthe Ġfirst Ġvalue Ġthat Ġdoesn 't Ġfit Ġin Ġnan os Ġrange , Ġcan Ġbe Ġexactly Ġrepresented Ġin Ġmillis . Ċ Ċ internal Ġconst Ġval ĠN AN OS _ IN _ M ILL IS Ġ= Ġ 1 _ 0 0 0 _ 0 0 0 Ċ // Ġmaximum Ġnumber Ġduration Ġcan Ġstore Ġin Ġnan ose cond Ġrange Ċ internal Ġconst Ġval ĠMAX _ NAN OS Ġ= ĠLong . MAX _ VALUE Ġ/ Ġ 2 Ġ/ ĠN AN OS _ IN _ M ILL IS Ġ* ĠN AN OS _ IN _ M ILL IS Ġ- Ġ 1 Ġ// Ġends Ġin Ġ.. ._ 9 9 9 _ 9 9 9 Ċ // Ġmaximum Ġnumber Ġduration Ġcan Ġstore Ġin Ġmilli second Ġrange , Ġalso Ġen codes Ġan Ġinfinite Ġvalue Ċ internal Ġconst Ġval ĠMAX _ M ILL IS Ġ= ĠLong . MAX _ VALUE Ġ/ Ġ 2 Ċ // ĠMAX _ NAN OS Ġexpressed Ġin Ġmilliseconds Ċ private Ġconst Ġval ĠMAX _ NAN OS _ IN _ M ILL IS Ġ= ĠMAX _ NAN OS Ġ/ ĠN AN OS _ IN _ M ILL IS Ċ Ċ private Ġfun Ġnan os To Millis ( nan os : ĠLong ): ĠLong Ġ= Ġnan os Ġ/ ĠN AN OS _ IN _ M ILL IS Ċ private Ġfun Ġmillis To Nan os ( millis : ĠLong ): ĠLong Ġ= Ġmillis Ġ* ĠN AN OS _ IN _ M ILL IS Ċ Ċ @ Experimental Time Ġprivate Ġfun Ġduration Of Nan os ( normal Nan os : ĠLong ) Ġ= ĠDuration ( normal Nan os Ġshl Ġ 1 ) Ċ @ Experimental Time Ġprivate Ġfun Ġduration Of Millis ( normal Millis : ĠLong ) Ġ= ĠDuration (( normal Millis Ġshl Ġ 1 ) Ġ+ Ġ 1 ) Ċ @ Experimental Time Ġprivate Ġfun Ġduration Of ( normal Value : ĠLong , Ġunit Discriminator : ĠInt ) Ġ= ĠDuration (( normal Value Ġshl Ġ 1 ) Ġ+ Ġunit Discriminator ) Ċ @ Experimental Time Ġprivate Ġfun Ġduration Of Nan os Normalized ( nan os : ĠLong ) Ġ= ĊĠĠĠ Ġif Ġ( nan os Ġin Ġ- MAX _ NAN OS .. MAX _ NAN OS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Of Nan os ( nan os ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Of Millis ( nan os To Millis ( nan os )) ĊĠĠĠ Ġ} Ċ Ċ @ Experimental Time Ġprivate Ġfun Ġduration Of Millis Normalized ( millis : ĠLong ) Ġ= ĊĠĠĠ Ġif Ġ( millis Ġin Ġ- MAX _ NAN OS _ IN _ M ILL IS .. MAX _ NAN OS _ IN _ M ILL IS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Of Nan os ( millis To Nan os ( millis )) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Of Millis ( millis . coerce In (- MAX _ M ILL IS , ĠMAX _ M ILL IS )) ĊĠĠĠ Ġ} ĊĊ Ċ internal Ġexpect Ġfun Ġformat To Exact Decimal s ( value : ĠDouble , Ġdecimals : ĠInt ): ĠString Ċ internal Ġexpect Ġfun Ġformat Up To Decimal s ( value : ĠDouble , Ġdecimals : ĠInt ): ĠString Ċ internal Ġexpect Ġfun Ġformat Sc ientific ( value : ĠDouble ): ĠString