/* Ċ Ġ* ĠDateTime Helper . kt Ċ Ġ* ĠImplements Ġthe ĠDateTime Helper Ġobject Ċ Ġ* ĠA ĠDateTime Helper Ġprovides Ġhelper Ġmethods Ġfor Ġconverting ĠDate Ġand ĠTime Ġobjects Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof Ċ Ġ* ĠESC APE POD Ġ- ĠFree Ġand ĠOpen ĠPod cast ĠApp Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 - 2 1 Ġ- ĠY 2 0 K . org Ċ Ġ* ĠLicensed Ġunder Ġthe ĠMIT - License Ċ Ġ* Ġhttp :// opensource . org / licenses / MIT Ċ Ġ*/ ĊĊ Ċ package Ġorg . y 2 0 k . escape pod . helpers Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġorg . y 2 0 k . escape pod . Keys Ċ import Ġjava . text . DateFormat Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . time . Zone Id Ċ import Ġjava . time . Z onedDateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . util .* ĊĊ Ċ /* Ċ Ġ* ĠDateTime Helper Ġobject Ċ Ġ*/ Ċ object ĠDateTime Helper Ġ{ ĊĊĠĠĠ Ġ/* ĠDefine Ġlog Ġtag Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠTAG : ĠString Ġ= ĠLog Helper . make Log Tag ( DateTime Helper :: class . java ) ĊĊĠĠĠ Ġ/* ĠMain Ġclass Ġvariables Ġ*/ ĊĠĠĠ Ġprivate Ġconst Ġval Ġr fc 2 8 2 2 Pattern : ĠString Ġ= Ġ" EEE , Ġd ĠM MM Ġy yyy ĠHH : mm : ss Ġz zz " ĊĠĠĠ Ġprivate Ġconst Ġval Ġr fc 2 8 2 2 pattern Without Timezone : ĠString Ġ= Ġ" EEE , Ġd ĠM MM Ġy yyy ĠHH : mm : ss " ĊĠĠĠ Ġprivate Ġconst Ġval Ġr fc 2 8 2 2 pattern Without Seconds : ĠString Ġ= Ġ" EEE , Ġd ĠM MM Ġy yyy ĠHH : mm " ĊĊĊĠĠĠ Ġ/* ĠCreates Ġa Ġreadable Ġdate Ġstring Ġ*/ ĊĠĠĠ Ġfun Ġget DateString ( date : ĠDate , Ġdate Style : ĠInt Ġ= ĠDate Format . MEDIUM ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDate Format . getDate Instance ( date Style , ĠLocale . getDefault ()). format ( date ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/* ĠConverts ĠRFC Ġ 2 8 2 2 Ġstring Ġrepresentation Ġof Ġa Ġdate Ġto ĠDATE Ġ*/ ĊĠĠĠ Ġfun Ġconvert From R fc 2 8 2 2 ( date String : ĠString ): ĠDate Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconvert ToDate From R fc 2 8 2 2 ( date String ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconvert ToDate From R fc 2 8 2 2 Legacy ( date String ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/* ĠConverts Ġa ĠDATE Ġto Ġits ĠRFC Ġ 2 8 2 2 Ġstring Ġrepresentation Ġ*/ ĊĠĠĠ Ġfun ĠconvertTo R fc 2 8 2 2 ( date : ĠDate ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠdateFormat : ĠSimpleDateFormat Ġ= ĠSimpleDateFormat ( rfc 2 8 2 2 Pattern , ĠLocale . EN GL ISH ) ĊĠĠĠĠĠĠĠ Ġreturn ĠdateFormat . format ( date ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/* ĠConverts Ġa Ġmilliseconds Ġin Ġto Ġa Ġreadable Ġformat Ġ*/ ĊĠĠĠ Ġfun ĠconvertTo Minutes And Seconds ( milliseconds : ĠLong , Ġnegative Value : ĠBoolean Ġ= Ġfalse ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġconvert Ġmilliseconds Ġto Ġminutes Ġand Ġseconds ĊĠĠĠĠĠĠĠ Ġval Ġminutes : ĠLong Ġ= Ġmilliseconds Ġ/ Ġ 1 0 0 0 Ġ/ Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġval Ġseconds : ĠLong Ġ= Ġmilliseconds Ġ/ Ġ 1 0 0 0 Ġ% Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġvar Ġtime String : ĠString Ġ= Ġ"${ minutes . toString (). pad Start ( 2 , Ġ' 0 ') }:${ seconds . toString (). pad Start ( 2 , Ġ' 0 ') }" ĊĠĠĠĠĠĠĠ Ġif Ġ( negative Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġa Ġminus Ġsign Ġif Ġa Ġnegative Ġvalues Ġwas Ġrequested ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime String Ġ= Ġ"- $ time String " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtime String ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/* ĠDetermines Ġif Ġa Ġdate Ġis Ġtoo Ġfar Ġin Ġthe Ġfuture . ĠUsed Ġto Ġdetermine , Ġif Ġdate Ġis Ġun real istic Ġ*/ ĊĠĠĠ Ġfun Ġis Sign ificant ly InThe Future ( date : ĠDate , Ġhours InThe Future : ĠInt Ġ= Ġ 4 8 ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠG regorian Calendar . getInstance (). time In Millis ĊĠĠĠĠĠĠĠ Ġval Ġsignificantly InThe Future Ġ= Ġnow Ġ+ Ġ( hours InThe Future Ġ* Ġ 3 6 0 0 Ġ* Ġ 1 0 0 0 ) Ġ// Ġhours Ġto Ġmilliseconds ĊĠĠĠĠĠĠĠ Ġreturn Ġdate . time Ġ> Ġsignificantly InThe Future ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/* ĠConverts ĠRFC Ġ 2 8 2 2 Ġstring Ġrepresentation Ġof Ġa Ġdate Ġto ĠDATE Ġ- Ġversion Ġusing ĠDateTime Formatter Ġ*/ ĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġconvert ToDate From R fc 2 8 2 2 ( date String : ĠString ) Ġ: ĠDate Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdate : ĠDate ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 st Ġtry : Ġparse Ġusing Ġstandard Ġformatter Ġ( RFC _ 1 1 2 3 _ DATE _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatter : ĠDateTime Formatter Ġ= ĠDateTime Formatter . RFC _ 1 1 2 3 _ DATE _ TIME ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġz onedDateTime : ĠZ onedDateTime Ġ= ĠZ onedDateTime . from ( formatter . parse ( date String )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġ ĠDate . from ( zon ed DateTime . to Instant ()) Ġ?: ĠKeys . DEFAULT _ DATE ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . w ( TAG , Ġ" Unable Ġto Ġparse . ĠTrying Ġan Ġalternative ĠDate Ġformatter . Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 nd Ġtry : Ġparse Ġusing Ġstandard Ġpattern ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatter : ĠDateTime Formatter Ġ= ĠDateTime Formatter . of Pattern ( rfc 2 8 2 2 Pattern , ĠLocale . EN GL ISH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġz onedDateTime : ĠZ onedDateTime Ġ= ĠZ onedDateTime . from ( formatter . parse ( date String )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġ ĠDate . from ( zon ed DateTime . to Instant ()) Ġ?: ĠKeys . DEFAULT _ DATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . w ( TAG , Ġ" Unable Ġto Ġparse . ĠTrying Ġan Ġalternative ĠDate Ġformatter . Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 3 rd Ġtry : Ġparse Ġwithout Ġtime Ġzone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatter : ĠDateTime Formatter Ġ= ĠDateTime Formatter . of Pattern ( rfc 2 8 2 2 pattern Without Timezone , ĠLocale . EN GL ISH ). with Zone ( Zone Id . system Default ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġz onedDateTime : ĠZ onedDateTime Ġ= ĠZ onedDateTime . from ( formatter . parse ( date String )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġ ĠDate . from ( zon ed DateTime . to Instant ()) Ġ?: ĠKeys . DEFAULT _ DATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . w ( TAG , Ġ" Unable Ġto Ġparse . ĠTrying Ġan Ġalternative ĠDate Ġformatter . Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 4 th Ġtry : Ġparse Ġwithout Ġseconds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate String Trim med : ĠString Ġ= Ġdate String . substring ( 0 , Ġ( date String . lastIndexOf (": ") + 3 )) Ġ// Ġremove Ġanything Ġafter ĠHH : mm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatter : ĠDateTime Formatter Ġ= ĠDateTime Formatter . of Pattern ( rfc 2 8 2 2 pattern Without Seconds , ĠLocale . EN GL ISH ). with Zone ( Zone Id . system Default ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġz onedDateTime : ĠZ onedDateTime Ġ= ĠZ onedDateTime . from ( formatter . parse ( date String Trim med )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġ ĠDate . from ( zon ed DateTime . to Instant ()) Ġ?: ĠKeys . DEFAULT _ DATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . e ( TAG , Ġ" Unable Ġto Ġparse . ĠRetry Ġusing Ġlegacy Ġmethod . Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġconvert ToDate From R fc 2 8 2 2 Legacy ( date String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdate ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/* ĠConverts ĠRFC Ġ 2 8 2 2 Ġstring Ġrepresentation Ġof Ġa Ġdate Ġto ĠDATE Ġ- Ġversion Ġusing ĠSimpleDateFormat Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġconvert ToDate From R fc 2 8 2 2 Legacy ( date String : ĠString ) Ġ: ĠDate Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdate : ĠDate ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 st Ġtry : Ġparse Ġusing Ġstandard Ġpattern ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateFormat : ĠSimpleDateFormat Ġ= ĠSimpleDateFormat ( rfc 2 8 2 2 Pattern , ĠLocale . EN GL ISH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= ĠdateFormat . parse ( date String ) Ġ?: ĠKeys . DEFAULT _ DATE ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . w ( TAG , Ġ" Unable Ġto Ġparse . ĠTrying Ġan Ġalternative ĠDate Ġformat . Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 nd Ġtry : Ġparse Ġwithout Ġtime Ġzone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateFormat : ĠSimpleDateFormat Ġ= ĠSimpleDateFormat ( rfc 2 8 2 2 pattern Without Timezone , ĠLocale . EN GL ISH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= ĠdateFormat . parse ( date String ) Ġ?: ĠKeys . DEFAULT _ DATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . w ( TAG , Ġ" Unable Ġto Ġparse . ĠTrying Ġan Ġalternative ĠDate Ġformat . Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 3 rd Ġtry : Ġparse Ġwithout Ġseconds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateFormat : ĠSimpleDateFormat Ġ= ĠSimpleDateFormat ( rfc 2 8 2 2 pattern Without Seconds , ĠLocale . EN GL ISH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= ĠdateFormat . parse ( date String ) Ġ?: ĠKeys . DEFAULT _ DATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Helper . e ( TAG , Ġ" Unable Ġto Ġparse . ĠReturn ing Ġa Ġdefault Ġdate . Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= ĠKeys . DEFAULT _ DATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdate ĊĠĠĠ Ġ} ĊĊ Ċ }