// ĠCopyright Ġ 2 0 0 8 ĠGoogle ĠInc . Ċ // Ċ // Ġ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 Ċ // Ċ // ĠĠĠĠ Ġhttp :// 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 Ġcom . google . android . st ard roid . math Ċ Ċ import Ġjava . util .* Ċ import Ġkotlin . math . floor Ċ Ċ public Ġconst Ġval ĠMIN UTES _ PER _ HOUR Ġ= Ġ 6 0 . 0 Ċ Ċ public Ġconst Ġval ĠSE CON DS _ PER _ HOUR Ġ= Ġ 3 6 0 0 . 0 Ċ Ċ // ĠConvert Ġfrom Ġhours Ġto Ġdegrees Ċ public Ġconst Ġval ĠHO UR S _ TO _ DE GRE ES Ġ= Ġ 3 6 0 . 0 f Ġ/ Ġ 2 4 . 0 f Ċ Ċ /** Ċ Ġ* ĠUtilities Ġfor Ġworking Ġwith ĠD ates Ġand Ġtimes . Ċ Ġ* Ċ Ġ* Ġ@ author ĠKevin ĠSer af ini Ċ Ġ* Ġ@ author ĠB rent ĠB ry an Ċ Ġ*/ Ċ /** Ċ Ġ* ĠCalculates Ġthe Ġnumber Ġof ĠJul ian ĠCent ur ies Ġfrom Ġthe Ġepoch Ġ 2 0 0 0 . 0 Ċ Ġ* Ġ( e quivalent Ġto ĠJul ian ĠDay Ġ 2 4 5 1 5 4 5 . 0 ). Ċ Ġ*/ Ċ fun Ġj ul ian Cent ur ies ( date : ĠDate ): ĠDouble Ġ{ ĊĠĠĠ Ġval Ġjd Ġ= Ġj ul ian Day ( date ) ĊĠĠĠ Ġval Ġdelta Ġ= Ġjd Ġ- Ġ 2 4 5 1 5 4 5 . 0 ĊĠĠĠ Ġreturn Ġdelta Ġ/ Ġ 3 6 5 2 5 . 0 Ċ } Ċ Ċ /** Ċ Ġ* ĠCalculates Ġthe ĠJul ian ĠDay Ġfor Ġa Ġgiven Ġdate Ġusing Ġthe Ġfollowing Ġformula : Ċ Ġ* ĠJ D Ġ= Ġ 3 6 7 Ġ* ĠY Ġ- ĠINT ( 7 Ġ* Ġ( Y Ġ+ ĠINT (( M Ġ+ Ġ 9 )/ 1 2 ))/ 4 ) Ġ+ ĠINT ( 2 7 5 Ġ* ĠM Ġ/ Ġ 9 ) Ċ Ġ* Ġ+ ĠD Ġ+ Ġ 1 7 2 1 0 1 3 . 5 Ġ+ ĠUT / 2 4 Ċ Ġ* Ċ Ġ* ĠNote Ġthat Ġthis Ġis Ġonly Ġvalid Ġfor Ġthe Ġyear Ġrange Ġ 1 9 0 0 Ġ- Ġ 2 0 9 9 . Ċ Ġ*/ Ċ fun Ġj ul ian Day ( date : ĠDate ): ĠDouble Ġ{ ĊĠĠĠ Ġval Ġcal Ġ= ĠCalendar . getInstance ( TimeZone . getTime Zone (" GMT ")) ĊĠĠĠ Ġcal . time Ġ= Ġdate ĊĠĠĠ Ġval Ġhour Ġ= Ġ( cal [ Calendar . HOUR _ OF _ DAY ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġcal [ Calendar . MINUTE ] Ġ/ ĠMIN UTES _ PER _ HOUR Ġ+ Ġcal [ Calendar . SECOND ] Ġ/ ĠSE CON DS _ PER _ HOUR ) ĊĠĠĠ Ġval Ġyear Ġ= Ġcal [ Calendar . YEAR ] ĊĠĠĠ Ġval Ġmonth Ġ= Ġcal [ Calendar . MONTH ] Ġ+ Ġ 1 ĊĠĠĠ Ġval Ġday Ġ= Ġcal [ Calendar . DAY _ OF _ MONTH ] ĊĠĠĠ Ġreturn Ġ( 3 6 7 . 0 Ġ* Ġyear Ġ- Ġfloor ( ĊĠĠĠĠĠĠĠĠ 7 . 0 Ġ* Ġ( year ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġfloor (( month Ġ+ Ġ 9 . 0 ) Ġ/ Ġ 1 2 . 0 )) Ġ/ Ġ 4 . 0 ĊĠĠĠ Ġ) Ġ+ Ġfloor ( 2 7 5 . 0 Ġ* Ġmonth Ġ/ Ġ 9 . 0 ) Ġ+ Ġday ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ 1 7 2 1 0 1 3 . 5 Ġ+ Ġhour Ġ/ Ġ 2 4 . 0 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠConverts Ġthe Ġgiven ĠJul ian ĠDay Ġto ĠG regorian ĠDate Ġ( in ĠUT Ġtime Ġzone ). Ċ Ġ* ĠBased Ġon Ġthe Ġformula Ġgiven Ġin Ġthe ĠEx plan atory ĠSup p lement Ġto Ġthe Ċ Ġ* ĠA str onom ical ĠAl man ac , Ġpg Ġ 6 0 4 . Ċ Ġ*/ Ċ fun Ġg regorian Date ( jul ian Day : ĠDouble ): ĠDate Ġ{ ĊĠĠĠ Ġvar Ġl Ġ= Ġj ul ian Day . toInt () Ġ+ Ġ 6 8 5 6 9 ĊĠĠĠ Ġval Ġn Ġ= Ġ 4 Ġ* Ġl Ġ/ Ġ 1 4 6 0 9 7 ĊĠĠĠ Ġl Ġ-= Ġ( 1 4 6 0 9 7 Ġ* Ġn Ġ+ Ġ 3 ) Ġ/ Ġ 4 ĊĠĠĠ Ġval Ġi Ġ= Ġ 4 0 0 0 Ġ* Ġ( l Ġ+ Ġ 1 ) Ġ/ Ġ 1 4 6 1 0 0 1 ĊĠĠĠ Ġl Ġ-= Ġ 1 4 6 1 Ġ* Ġi Ġ/ Ġ 4 Ġ+ Ġ 3 1 ĊĠĠĠ Ġval Ġj Ġ= Ġ 8 0 Ġ* Ġl Ġ/ Ġ 2 4 4 7 ĊĠĠĠ Ġval Ġd Ġ= Ġl Ġ- Ġ 2 4 4 7 Ġ* Ġj Ġ/ Ġ 8 0 ĊĠĠĠ Ġl Ġ= Ġj Ġ/ Ġ 1 1 ĊĠĠĠ Ġval Ġm Ġ= Ġj Ġ+ Ġ 2 Ġ- Ġ 1 2 Ġ* Ġl ĊĠĠĠ Ġval Ġy Ġ= Ġ 1 0 0 Ġ* Ġ( n Ġ- Ġ 4 9 ) Ġ+ Ġi Ġ+ Ġl ĊĠĠĠ Ġval Ġfraction Ġ= Ġj ul ian Day Ġ- Ġfloor ( jul ian Day ) ĊĠĠĠ Ġval Ġd Hours Ġ= Ġfraction Ġ* Ġ 2 4 . 0 ĊĠĠĠ Ġval Ġhours Ġ= Ġd Hours . toInt () ĊĠĠĠ Ġval Ġd Minutes Ġ= Ġ( d Hours Ġ- Ġhours ) Ġ* Ġ 6 0 . 0 ĊĠĠĠ Ġval Ġminutes Ġ= Ġd Minutes . toInt () ĊĠĠĠ Ġval Ġseconds Ġ= Ġ(( d Minutes Ġ- Ġminutes ) Ġ* Ġ 6 0 . 0 ). toInt () ĊĠĠĠ Ġval Ġcal Ġ= ĠCalendar . getInstance ( TimeZone . getTime Zone (" UT ")) ĊĠĠĠ Ġcal [ y , Ġm Ġ- Ġ 1 , Ġd , Ġhours Ġ+ Ġ 1 2 , Ġminutes ] Ġ= Ġseconds ĊĠĠĠ Ġreturn Ġcal . time Ċ } Ċ Ċ /** Ċ Ġ* ĠCalculates Ġlocal Ġmean Ġsid ere al Ġtime Ġin Ġdegrees . ĠNote Ġthat Ġlongitude Ġis Ċ Ġ* Ġnegative Ġfor Ġwest ern Ġlongitude Ġvalues . Ċ Ġ*/ Ċ fun Ġmean Sid ere al Time ( date : ĠDate , Ġlongitude : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠ Ġ// ĠFirst , Ġcalculate Ġnumber Ġof ĠJul ian Ġdays Ġsince ĠJ 2 0 0 0 . 0 . ĊĠĠĠ Ġval Ġjd Ġ= Ġj ul ian Day ( date ) ĊĠĠĠ Ġval Ġdelta Ġ= Ġjd Ġ- Ġ 2 4 5 1 5 4 5 . 0 f ĊĊĠĠĠ Ġ// ĠCalculate Ġthe Ġglobal Ġand Ġlocal Ġsid ere al Ġtimes ĊĠĠĠ Ġval Ġgst Ġ= Ġ 2 8 0 . 4 6 1 f Ġ+ Ġ 3 6 0 . 9 8 5 6 4 7 3 7 f Ġ* Ġdelta ĊĠĠĠ Ġval Ġlst Ġ= Ġnormalize Angle ( gst Ġ+ Ġlongitude ) ĊĠĠĠ Ġreturn Ġlst . toFloat () Ċ } Ċ Ċ /** Ċ Ġ* ĠNormal izes Ġthe Ġangle Ġto Ġthe Ġrange Ġ 0 Ġ<= Ġvalue Ġ< Ġ 3 6 0 . Ċ Ġ*/ Ċ private Ġfun Ġnormalize Angle ( angle Degrees : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġreturn Ġpositive Mod ( angle Degrees , Ġ 3 6 0 . 0 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠNormal izes Ġthe Ġtime Ġto Ġthe Ġrange Ġ 0 Ġ<= Ġvalue Ġ< Ġ 2 4 . Ċ Ġ*/ Ċ fun Ġnormalize Hours ( time : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġreturn Ġpositive Mod ( time , Ġ 2 4 . 0 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠTake Ġa Ġuniversal Ġtime Ġbetween Ġ 0 Ġand Ġ 2 4 Ġand Ġreturn Ġa Ġtriple Ċ Ġ* Ġ[ hours , Ġminutes , Ġseconds ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġuniversal Time ĠUniversal Ġtime Ġ- Ġpres umed Ġto Ġbe Ġbetween Ġ 0 Ġand Ġ 2 4 . Ċ Ġ* Ġ@ return Ġ[ hours , Ġminutes , Ġseconds ] Ċ Ġ*/ Ċ fun Ġclock Time From H rs ( universal Time : ĠDouble ): ĠInt Array Ġ{ ĊĠĠĠ Ġval Ġh ms Ġ= ĠInt Array ( 3 ) ĊĠĠĠ Ġh ms [ 0 ] Ġ= Ġfloor ( universal Time ). toInt () ĊĠĠĠ Ġval Ġremainder M ins Ġ= ĠMIN UTES _ PER _ HOUR Ġ* Ġ( universal Time Ġ- Ġh ms [ 0 ]) ĊĠĠĠ Ġh ms [ 1 ] Ġ= Ġfloor ( remainder M ins ). toInt () ĊĠĠĠ Ġh ms [ 2 ] Ġ= Ġfloor ( remainder M ins Ġ- Ġh ms [ 1 ]). toInt () ĊĠĠĠ Ġreturn Ġh ms Ċ }