/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠAle ks and r ĠK amy sh nik ov Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 Ġname . er ax ill an . an il ist app . utilities Ċ Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . lang . Number FormatException Ċ import Ġjava . time .* Ċ import Ġjava . time . format . DateTime ParseException Ċ import Ġjava . time . zone . Zone Rules Exception Ċ import Ġjava . util .* ĊĊ Ċ class ĠDay OfWeek Time Parser Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠD ow Time ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdow : ĠDay OfWeek , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlt : ĠLocal Time , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtz Offset : ĠZone Offset , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtz Name : ĠZone Id ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ" W - 1 T 2 0 : 3 0 : 0 0 . 0 0 0 0 0 0 + 0 3 : 0 0 [ Europe / M os cow ]" ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( input : ĠCharSequence ): ĠD ow Time ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTime Ġzone Ġcan Ġcontain Ġ' w ' Ġand Ġ' t ' Ġchars , Ġso Ġfirst Ġof Ġall Ġextract Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Tokens Ġ= Ġinput . split ("[ ", Ġ"] "). filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( base Tokens . size Ġ!= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Invalid Ġscheduled Ġtime Ġformat !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Tokens Ġ(${ base Tokens . size }): \ n Ġ${ base Tokens . join ToString ("\ n ") }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs ct String Ġ= Ġbase Tokens [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs ct Tokens Ġ= Ġs ct String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uppercase ( Locale . US ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (" W -", Ġ" T ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s ct Tokens . size Ġ!= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Invalid Ġscheduled Ġtime Ġformat !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Tokens Ġ= Ġ\ n ${ s ct Tokens . join ToString ("\ n ") }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtz Tokens Ġ= Ġs ct Tokens [ 1 ]. split ( Regex (" (? =[ +- ]) ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tz Tokens . size Ġ!= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Invalid Ġscheduled Ġtime Ġformat !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Tokens Ġ= Ġ\ n ${ tz Tokens . join ToString ("\ n ") }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdow Str Ġ= Ġs ct Tokens [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlt Str Ġ= Ġtz Tokens [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtz Offset Str Ġ= Ġtz Tokens [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtz Name Str Ġ= Ġbase Tokens [ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* if Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Raw Ġday Ġof Ġweek : Ġ$ d ow Str ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Raw Ġlocal Ġtime : Ġ$ lt Str ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Raw Ġtz Ġoffset : Ġ$ tz Offset Str ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Raw Ġtz Ġname : Ġ$ tz Name Str ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdow Int Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdow Str . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Invalid Ġday Ġof Ġweek Ġstring Ġ'$ d ow Str ' !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdow Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDay OfWeek . of ( d ow Int ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠDateTime Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Invalid Ġday Ġof Ġweek Ġinteger Ġ'$ d ow Int ' !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlt Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Time . parse ( lt Str ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠDateTime ParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Invalid Ġlocal Ġtime Ġstring Ġ'$ lt Str ' !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtz Offset Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZone Offset . of ( tz Offset Str ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠDateTime Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Invalid Ġtime Ġzone Ġoffset Ġstring Ġ'$ tz Offset Str ' !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠZone Rules Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Time Ġzone Ġconfiguration Ġproblem Ġfound !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtz Name Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZone Id . of ( tz Name Str ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠDateTime Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Invalid Ġtime Ġzone Ġoffset Ġstring Ġ'$ tz Offset Str ' !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠZone Rules Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Time Ġzone Ġconfiguration Ġproblem Ġfound !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠD ow Time ( d ow , Ġlt , Ġtz Offset , Ġtz Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ