[Gambas-user] Unix Date conversion

sbungay sbungay at ...981...
Mon Jul 24 18:29:32 CEST 2006


   Thanks Laurent.. I have created a class called DateFunctions that has 
the following contained within it...


TimeStampToJulianDay(TimeStamp AS Long) as Integer
TimeStampToJulianYear(TimeStamp AS Long) as Integer

MonthNumber(JulianDay AS Integer) as Integer
MonthName(MonthNumber AS Integer) as String

   I am constrained by time and the code is not pretty/elegant.. in fact 
the term "brute force" comes to mind... :)
   Anyway.. I can instantiate the class and now get what I need.. as 
needs change so too will the class. This is its current state...

' Gambas class file
' Days in each month (Feb changes depending on leap years)
' Want the class to be dynamic.. there has to be a better way than
' declaring a useless variable at the top. RTFM this...
PUBLIC NotStatic AS Boolean

CONST cSecondsInADay AS Integer = 86400
CONST cDaysInAYear AS Float = 364.25

CONST cJan AS Integer = 1
CONST cFeb AS Integer = 2
CONST cMar AS Integer = 3
CONST cApr AS Integer = 4
CONST cMay AS Integer = 5
CONST cJun AS Integer = 6
CONST cJul AS Integer = 7
CONST cAug AS Integer = 8
CONST cSep AS Integer = 9
CONST cOct AS Integer = 10
CONST cNov AS Integer = 11
CONST cDecember AS Integer = 12

CONST cJanDays AS Integer = 31
CONST cFebDays AS Integer = 28
CONST cMarDays AS Integer = 31
CONST cAprDays AS Integer = 30
CONST cMayDays AS Integer = 31
CONST cJunDays AS Integer = 30
CONST cJulDays AS Integer = 31
CONST cAugDays AS Integer = 31
CONST cSepDays AS Integer = 30
CONST cOctDays AS Integer = 31
CONST cNovDays AS Integer = 30
CONST cDecDays AS Integer = 31

'***********************************************************************
'* Author: Stephen Bungay
'* Date: July 23 2006
'*
'* Parameters:
'*   Integer
'* Called By
'*
'* Calls
'*
'* Returns
'*   Integer
'***********************************************************************
PUBLIC FUNCTION MonthNumber(JulianDate AS Integer) AS Integer

   DIM Months AS NEW Integer[13]

   DIM Scrap AS Integer
   DIM Counter AS Integer

   Months[cJan] = cJanDays
   Months[cFeb] = cFebDays
   Months[cMar] = cMarDays
   Months[cApr] = cAprDays
   Months[cMay] = cMayDays
   Months[cJun] = cJunDays
   Months[cJul] = cJulDays
   Months[cAug] = cAugDays
   Months[cSep] = cSepDays
   Months[cOct] = cOctDays
   Months[cNov] = cNovDays
   Months[cDecember] = cDecDays

   Scrap = JulianDate
   Counter = 1

   REPEAT
      Scrap = Scrap - Months[Counter]
      Counter = Counter + 1
   UNTIL Scrap <= Months[Counter]

   RETURN (Counter - 1)

END

'***********************************************************************
'* Author: Stephen Bungay
'* Date: July 23 2006
'*
'* Parameters:
'*   Long
'* Called By
'*
'* Calls
'*
'* Returns
'*   Integer
'***********************************************************************
PUBLIC FUNCTION TimeStampToYear(SecondsSinceEpoch AS Long) AS Integer

   DIM YearNumber AS Integer

   DIM DaysSinceEpoch AS Integer
   DIM YearsSinceEpoch AS Integer
   DIM FractionalYearsSinceEpoch AS Float

   DIM JulianDay AS Integer

   DaysSinceEpoch = SecondsSinceEpoch / cSecondsInADay
   YearsSinceEpoch = DaysSinceEpoch / cDaysInAYear
   FractionalYearsSinceEpoch = CFloat(Mid$(CStr(DaysSinceEpoch / 
cDaysInAYear), InStr(CStr(DaysSinceEpoch / cDaysInAYear), ".", 1), 5))
   JulianDay = CInt(cDaysInAYear * FractionalYearsSinceEpoch)

   RETURN (1970 + YearsSinceEpoch)

END

'***********************************************************************
'* Author: Stephen Bungay
'* Date: July 23 2006
'*
'* Parameters:
'*    Long
'* Called By
'*
'* Calls
'*
'* Returns
'*   Integer
'***********************************************************************
PUBLIC FUNCTION TimeStampToJulianDay(SecondsSinceEpoch AS Long) AS Integer

   DIM DaysSinceEpoch AS Integer
   DIM FractionalYearsSinceEpoch AS Float

   DIM ExtractedYear AS Integer
   DIM JulianDay AS Integer

   DaysSinceEpoch = SecondsSinceEpoch / 86400
   FractionalYearsSinceEpoch = CFloat(Mid$(CStr(DaysSinceEpoch / 
365.24),   InStr(CStr(DaysSinceEpoch / 365.24), ".", 1), 5))
   JulianDay = CInt(365 * FractionalYearsSinceEpoch)

   RETURN (JulianDay)

END


'***********************************************************************
'* Author: Stephen Bungay
'* Date: July 23 2006
'*
'* Parameters:
'*    Integer
'*
'* Called By
'*
'* Calls
'*
'* Returns
'*   String
'*
'***********************************************************************
PUBLIC FUNCTION MonthName(MonthNumber AS Integer) AS String
   DIM X AS String

   SELECT CASE MonthNumber
          CASE 1
               X = "January"
          CASE 2
               X = "February"
          CASE 3
               X = "March"
          CASE 4
               X = "April"
          CASE 5
               X = "May"
          CASE 6
               X = "June"
          CASE 7
               X = "July"
          CASE 8
               X = "August"
          CASE 9
               X = "September"
          CASE 10
               X = "October"
          CASE 11
               X = "November"
          CASE 12
               X = "December"
   END SELECT

   RETURN (X)
END



   Thanks to all for helping out...

Laurent Carlier wrote:
> Le lundi 24 juillet 2006 06:13, sbungay a écrit :
> 
>>   I've been coding for the last 17 hours and can no longer see straight
>>let alone think straight...  :)
>>   Have a Unix date stored in a table and need to convert it to
>>something the average human can read... there should be a function for
>>this... and at the moment I am too tired to write one.. anybody got one
>>they can part with? I've been looking through the gambas docs and don't
>>see anything there (although I'm so tired I could walk right past the
>>answer and not see it).
>>
>>Steve....ZZZzzzzzzz...
>>
>>Good night all (to those in Europe... good morning!)
>>
> 
> 
> Try this, i just going to do it
> 
> It's really dirty but it should work
> 
> ' Gambas module file
> 
> PUBLIC SUB Main()
> 
>   PRINT convert(1142123287)
>   
> END
> 
> PUBLIC FUNCTION convert(value AS Integer) AS Date
>   
>   DIM $valYear AS Integer
>   DIM $valMonth AS Integer = 1
>   DIM $valDay AS Integer
>   DIM $valHour AS Integer
>   DIM $valMinute AS Integer
>   DIM $valSecond AS Integer
>   
>   DIM $Months AS Integer[] = [31, 27, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
>   DIM $i AS Integer
>   DIM $valTmp AS Float
>   
>   $valTmp = (value / (365.25 * 60 * 60 * 24))
>   $valYear = 1970 + $valTmp
>   IF (checkYear($valYear)) THEN INC ($Months[1])
>   $valTmp = Frac($valTmp) * 365.25
> 
>   FOR EACH $i IN $Months
>     IF $valTmp > $i THEN
>       $valTmp = $valTmp - $i
>       INC ($valMonth)
>     ELSE
>       BREAK
>     ENDIF
>   NEXT
>   
>   $valDay = $valTmp
>   $valTmp = ($valTmp - $valDay) * 24
>   $valHour = $valTmp
>   $valTmp = ($valTmp - $valHour) * 60
>   $valMinute = $valTmp
>   $valTmp = ($valTmp - $valMinute) * 60
>   $valSecond = $valTmp
>   
>   RETURN Date($valYear, $valMonth, $valDay, $valHour, $valMinute, $valSecond)
>   
> END
> 
> PUBLIC FUNCTION checkYear(value AS Integer) AS Boolean
>   
>   IF ((((value MOD 4) = 0) AND (value MOD 100) <> 0) OR ((value MOD 400) = 0))
>     RETURN TRUE
>   ELSE 
>     RETURN FALSE
>   ENDIF
>   
> END
> 
> --
> 
> 
> Regards,
> 
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys -- and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> Gambas-user mailing list
> Gambas-user at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user
> 




More information about the User mailing list