@ file : Suppress (" Magic Number ") Ċ Ċ package Ġio . github . reactive circ us . stream lined . ui . util Ċ Ċ import Ġjava . time . Instant Ċ import Ġjava . time . Zone Id Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . util . Locale Ċ import Ġkotlin . time . Duration Unit Ċ import Ġkotlin . time . Experimental Time Ċ import Ġkotlin . time . days Ċ import Ġkotlin . time . hours Ċ import Ġkotlin . time . minutes Ċ import Ġkotlin . time . to Duration Ċ Ċ /** Ċ Ġ* ĠConverts Ġthe Ġtimestamp Ġto Ġa Ġformatted ĠString Ċ Ġ*/ Ċ fun ĠLong . to Formatted DateString ( ĊĠĠĠ Ġpattern : ĠString , ĊĠĠĠ Ġzone Id : ĠZone Id Ġ= ĠZone Id . system Default (), ĊĠĠĠ Ġlocale : ĠLocale Ġ= ĠLocale . getDefault () Ċ ): ĠString Ġ{ ĊĠĠĠ Ġrequire ( this Ġ> Ġ 0 ) Ġ{ Ġ" Timestamp Ġmust Ġbe Ġpositive ." Ġ} ĊĠĠĠ Ġval Ġformatter Ġ= ĠDateTime Formatter . of Pattern ( pattern ). with Locale ( locale ) ĊĠĠĠ Ġreturn ĠInstant . of Epoch Milli ( this ). at Zone ( zone Id ). format ( formatter ) ĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġsure Ġ"." Ġis Ġremoved Ġwhen Ġusing Ġthree - letter Ġabbre viation Ġfor Ġmonth ĊĠĠĠĠĠĠĠ Ġ. replace (".", Ġ"") Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġprett ified Ġduration Ġbetween Ġa Ġprevious Ġtimestamp Ġand Ġnow . Ċ Ġ*/ Ċ @ Opt In ( Experimental Time :: class ) Ċ fun ĠLong . time Ago ( ĊĠĠĠ Ġfallback Date Pattern : ĠString , ĊĠĠĠ Ġzone Id : ĠZone Id Ġ= ĠZone Id . system Default (), ĊĠĠĠ Ġlocale : ĠLocale Ġ= ĠLocale . getDefault (), ĊĠĠĠ Ġclock : ĠClock Ġ= ĠReal Clock () Ċ ): ĠString Ġ{ ĊĠĠĠ Ġrequire ( this Ġ> Ġ 0 ) Ġ{ Ġ" Timestamp Ġmust Ġbe Ġpositive ." Ġ} ĊĠĠĠ Ġval Ġtime Ago Ġ= Ġ( clock . currentTimeMillis Ġ- Ġthis ) ĊĠĠĠĠĠĠĠ Ġ. to Duration ( Duration Unit . MILLISECONDS ) ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġtime Ago Ġ< Ġ 1 . minutes Ġ-> Ġ" Moment s Ġago " ĊĠĠĠĠĠĠĠ Ġtime Ago Ġ< Ġ 1 . hours Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ago Ġ< Ġ 2 . minutes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 Ġminute Ġago " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ time Ago . in Minutes . toInt ()} Ġminutes Ġago " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtime Ago Ġ< Ġ 1 . days Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ago Ġ< Ġ 2 . hours ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 Ġhour Ġago " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ time Ago . in Hours . toInt ()} Ġhours Ġago " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtime Ago Ġ< Ġ 7 . days Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ago Ġ< Ġ 2 . days ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Y esterday " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ time Ago . in Days . toInt ()} Ġdays Ġago " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthis . to Formatted DateString ( fallback Date Pattern , Ġzone Id , Ġlocale ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠClock Ġ{ ĊĠĠĠ Ġval ĠcurrentTime Millis : ĠLong Ċ } Ċ Ċ internal Ġclass ĠReal Clock Ġ: ĠClock Ġ{ ĊĠĠĠ Ġoverride Ġval ĠcurrentTime Millis : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠSystem . currentTimeMillis () Ċ } Ċ