[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