/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . Ċ Ġ* ĠCreated Ġby ĠYo lo Santa Ċ Ġ* ĠCreated ĠOn Ġ 1 0 / 2 2 / 2 0 , Ġ 1 : 2 3 ĠAM Ċ Ġ*/ Ċ Ċ package Ġcc . fy re . st ark . core . util Ċ Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġjava . util . regex . Pattern Ċ Ċ object ĠTime Utils Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmm ss Builder : ĠThread Local < StringBuilder > Ġ= ĠThread Local . with Initial Ġ{ Ġjava . lang . StringBuilder () Ġ} ĊĠĠĠ Ġprivate Ġval ĠdateFormat : ĠSimpleDateFormat Ġ= ĠSimpleDateFormat (" MM / dd / yyyy ĠHH : mm ") ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Into HH MM SS ( secs : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġformat Into MM SS ( secs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Long Into HH MM SS ( secs : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġun converted Seconds Ġ= Ġsecs . toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġformat Into MM SS ( un converted Seconds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Into MM SS ( secs : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsecs Ġ= Ġsecs ĊĠĠĠĠĠĠĠ Ġval Ġseconds Ġ= Ġsecs Ġ% Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġsecs Ġ-= Ġseconds ĊĠĠĠĠĠĠĠ Ġvar Ġminutes Count Ġ= Ġ( secs Ġ/ Ġ 6 0 ). to Long () ĊĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġminutes Count Ġ% Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġminutes Count Ġ-= Ġminutes ĊĠĠĠĠĠĠĠ Ġval Ġhours Ġ= Ġminutes Count Ġ/ Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmm ss Builder . get () ĊĠĠĠĠĠĠĠ Ġresult . set Length ( 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( hours Ġ> Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hours Ġ< Ġ 1 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append (" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append ( hours ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append (": ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( minutes Ġ< Ġ 1 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append (" 0 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult . append ( minutes ) ĊĠĠĠĠĠĠĠ Ġresult . append (": ") ĊĠĠĠĠĠĠĠ Ġif Ġ( seconds Ġ< Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append (" 0 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult . append ( seconds ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Long Into MM SS ( secs : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġun converted Seconds Ġ= Ġsecs . toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġformat Into MM SS ( un converted Seconds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Into Detailed String ( secs : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( secs Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" 0 Ġseconds " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġremainder Ġ= Ġsecs Ġ% Ġ 8 6 4 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġsecs Ġ/ Ġ 8 6 4 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġhours Ġ= Ġremainder Ġ/ Ġ 3 6 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġremainder Ġ/ Ġ 6 0 Ġ- Ġhours Ġ* Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġval Ġseconds Ġ= Ġremainder Ġ% Ġ 3 6 0 0 Ġ- Ġminutes Ġ* Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġval Ġf Days Ġ= Ġif Ġ( days Ġ> Ġ 0 ) Ġ" Ġ" Ġ+ Ġdays Ġ+ Ġ" Ġday " Ġ+ Ġif Ġ( days Ġ> Ġ 1 ) Ġ" s " Ġelse Ġ"" Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġf Hours Ġ= Ġif Ġ( hours Ġ> Ġ 0 ) Ġ" Ġ" Ġ+ Ġhours Ġ+ Ġ" Ġhour " Ġ+ Ġif Ġ( hours Ġ> Ġ 1 ) Ġ" s " Ġelse Ġ"" Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġf Minutes Ġ= Ġif Ġ( minutes Ġ> Ġ 0 ) Ġ" Ġ" Ġ+ Ġminutes Ġ+ Ġ" Ġminute " Ġ+ Ġif Ġ( minutes Ġ> Ġ 1 ) Ġ" s " Ġelse Ġ"" Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġf Seconds Ġ= Ġif Ġ( seconds Ġ> Ġ 0 ) Ġ" Ġ" Ġ+ Ġseconds Ġ+ Ġ" Ġsecond " Ġ+ Ġif Ġ( seconds Ġ> Ġ 1 ) Ġ" s " Ġelse Ġ"" Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn Ġ( f Days Ġ+ Ġf Hours Ġ+ Ġf Minutes Ġ+ Ġf Seconds ). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Into Short String ( secs : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( secs Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" 0 Ġseconds " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġremainder Ġ= Ġsecs Ġ% Ġ 8 6 4 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġsecs Ġ/ Ġ 8 6 4 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġhours Ġ= Ġremainder Ġ/ Ġ 3 6 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġremainder Ġ/ Ġ 6 0 Ġ- Ġhours Ġ* Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġval Ġseconds Ġ= Ġremainder Ġ% Ġ 3 6 0 0 Ġ- Ġminutes Ġ* Ġ 6 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( days Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hours Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ("$ days Ġday ${ if Ġ( days Ġ== Ġ 1 ) Ġ"" Ġelse Ġ" s "} Ġ$ hours Ġhour ${ if Ġ( hours Ġ== Ġ 1 ) Ġ"" Ġelse Ġ" s "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ("$ days Ġday ${ if Ġ( days Ġ== Ġ 1 ) Ġ"" Ġelse Ġ" s "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( hours Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( minutes Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ("$ hours Ġhour ${ if Ġ( hours Ġ== Ġ 1 ) Ġ"" Ġelse Ġ" s "} Ġ$ minutes Ġminute ${ if Ġ( minutes Ġ== Ġ 1 ) Ġ"" Ġelse Ġ" s "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ("$ hours Ġhour ${ if Ġ( hours Ġ== Ġ 1 ) Ġ"" Ġelse Ġ" s "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( minutes Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seconds Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ("$ minutes Ġminute ${ if Ġ( minutes Ġ== Ġ 1 ) Ġ"" Ġelse Ġ" s "} Ġ$ seconds Ġsecond ${ if Ġ( seconds Ġ== Ġ 1 ) Ġ"" Ġelse Ġ" s "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ("$ minutes Ġminute ${ if Ġ( minutes Ġ== Ġ 1 ) Ġ"" Ġelse Ġ" s "} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . trim (). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Long Into Detailed String ( secs : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġun converted Seconds Ġ= Ġsecs . toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġformat Into Detailed String ( un converted Seconds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Into Calendar String ( date : ĠDate ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠdateFormat . format ( date ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġparse Time ( time : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( time Ġ== Ġ" 0 " Ġ|| Ġtime Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlife Match Ġ= ĠarrayOf (" y ", Ġ" w ", Ġ" d ", Ġ" h ", Ġ" m ", Ġ" s ") ĊĠĠĠĠĠĠĠ Ġval Ġlife Interval Ġ= Ġint ArrayOf ( 3 1 _ 5 3 6 _ 0 0 0 , Ġ 6 0 4 8 0 0 , Ġ 8 6 4 0 0 , Ġ 3 6 0 0 , Ġ 6 0 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġvar Ġseconds Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlife Match . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= ĠPattern . compile (" ([ 0 - 9 ]+ )" Ġ+ Ġlife Match [ i ]). matcher ( time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seconds Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseconds Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseconds Ġ+= ĠInteger . parseInt ( matcher . group ( 1 )) Ġ* Ġlife Interval [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( seconds Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Invalid Ġtime Ġprovided .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġseconds ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġparse TimeTo Long ( time : ĠString ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġun converted Seconds Ġ= Ġparse Time ( time ) ĊĠĠĠĠĠĠĠ Ġreturn Ġun converted Seconds . to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Seconds Between ( a : ĠDate , Ġb : ĠDate ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Seconds Between Long ( a , Ġb ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Seconds Between Long ( a : ĠDate , Ġb : ĠDate ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= Ġa . time Ġ- Ġb . time ĊĠĠĠĠĠĠĠ Ġval Ġabs Diff Ġ= ĠMath . abs ( diff ) ĊĠĠĠĠĠĠĠ Ġreturn Ġabs Diff Ġ/ Ġ 1 0 0 0 L ĊĠĠĠ Ġ} Ċ Ċ }