UnixTimeDate
SwordfishUser.UnixTimeDate History
Hide minor edits - Show changes to output
Changed line 33 from:
USART.Write(DecToStr(SntpTime.Year),32DecToStr(SntpTime.Hour),":",DecToStr(SntpTime.Min))
to:
USART.Write(DecToStr(SntpTime.Year),32,DecToStr(SntpTime.Hour),":",DecToStr(SntpTime.Min))
Changed lines 33-34 from:
USART.Write(DecToStr(SntpTime.Year),32DecToStr(SntpTime.Hour),":",DecToStr(SntpTime.Min),":",DecToStr(SntpTime.Sec))
to:
USART.Write(DecToStr(SntpTime.Year),32DecToStr(SntpTime.Hour),":",DecToStr(SntpTime.Min))
USART.Write(":",DecToStr(SntpTime.Sec))
USART.Write(":",DecToStr(SntpTime.Sec))
Changed lines 32-33 from:
USART.Write(SntpTime.DowStr,DecToStr(SntpTime.Day),32,DecToStr(SntpTime.Month),32,DecToStr(SntpTime.Year),32)
USART.Write(DecToStr(SntpTime.Hour),":",DecToStr(SntpTime.Min),":",DecToStr(SntpTime.Sec))
to:
USART.Write(SntpTime.DowStr,DecToStr(SntpTime.Day),32,DecToStr(SntpTime.Month),32)
USART.Write(DecToStr(SntpTime.Year),32DecToStr(SntpTime.Hour),":",DecToStr(SntpTime.Min),":",DecToStr(SntpTime.Sec))
USART.Write(DecToStr(SntpTime.Year),32DecToStr(SntpTime.Hour),":",DecToStr(SntpTime.Min),":",DecToStr(SntpTime.Sec))
Changed lines 1-3 from:
A small
to:
A small module to convert a Unix timestamp to Readable Date/time.
Added lines 1-138:
A small function tocConvert a Unix timestamp to Readable Date/time.
Defines a structure to hold the date after the conversion and names it SntpTime.
A conversion from a Proton version by Gabi
The variables in the structute are:-
Sec As Byte
Min As Byte
Hour As Byte
Year As Word
Month As Byte
Day As Byte
Dow As Byte
DowStr As String * 3
Demo code
=code [=
Include "usart.bas"
Include "convert.bas"
Include "unixtimedate.bas"
Dim unixtime As LongWord
SetBaudrate(br19200)
unixtime = 34857915
UnixToDate(unixtime)
USART.Write(SntpTime.DowStr,DecToStr(SntpTime.Day),32,DecToStr(SntpTime.Month),32,DecToStr(SntpTime.Year),32)
USART.Write(DecToStr(SntpTime.Hour),":",DecToStr(SntpTime.Min),":",DecToStr(SntpTime.Sec))
=]
The module
=code [=
{
****************************************************************
* Name : UnixTimeDate.BAS *
* Author : Gabi Mihaila / Tim Box *
* Notice : No Copyright *
* : *
* Date : 17-Oct-06 *
* Version : 1.0 *
* Notes : *
* : *
****************************************************************
}
Module UnixTimeDate
Structure UnixSntpTime
Sec As Byte
Min As Byte
Hour As Byte
Year As Word
Month As Byte
Day As Byte
Dow As Byte
DowStr As String * 3
End Structure
Dim
TempDay As LongWord,
tempa As LongWord
Public Dim SntpTime As UnixSntpTime
Const
Months_Days(13) As Byte = ( 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
DOWStrConst(7) As String = ("Thu","Fri","Sat","Sun","Mon","Tue","Wed")
Public Sub UnixToDate(PUnixTime As LongWord)
{
check with http://www.onlineconversion.com/PUnixTime.htm
Example --> PUnixTime = 1160906700 ; input Unix Time Stamp and call this sub
}
// seconds:
SntpTime.Sec = PUnixTime Mod 60 //;
PUnixTime = PUnixTime / 60 //;
// minutes:
SntpTime.Min = PUnixTime Mod 60
PUnixTime = PUnixTime / 60
// hours:
SntpTime.Hour = PUnixTime Mod 24
PUnixTime = PUnixTime / 24
// here PUnixTime equals number of days since Thu 1st Jan 1970
// so we can find the day of the week like this:
SntpTime.Dow = PUnixTime Mod 7 ' DOW 0, 1, 2, 3, 4, 5, 6
' DOW_STR Thu Fri Sat Sun Mon Tue Wed
SntpTime.DowStr = DOWStrConst(SntpTime.Dow)
//
SntpTime.Year = 1970 // we start with the NTP starting year offset
// year:
While 1 = 1
TempDay = 365 // say its a normal year (not leap)
If (SntpTime.Year And $03) = 0 Then
TempDay = 365 + 1 // LEAP Year
EndIf
If TempDay > PUnixTime Then
Break
EndIf
PUnixTime = PUnixTime - TempDay
Inc (SntpTime.Year)
Wend
// month:
For SntpTime.Month = 1 To 12
tempa = Months_Days(SntpTime.Month)
If PUnixTime <= tempa Then
Break
EndIf
PUnixTime = PUnixTime - tempa
Next
// days:
If TempDay = 366 And SntpTime.Month <= 2 Then
SntpTime.Day = PUnixTime + 1
Exit
ElseIf TempDay = 366 And SntpTime.Month > 2 Then
SntpTime.Day = PUnixTime
Exit
EndIf
If TempDay = 365 And SntpTime.Month = 2 Then
SntpTime.Day = PUnixTime + 1
If SntpTime.Day = 29 Then
SntpTime.Day = 1
SntpTime.Month = SntpTime.Month + 1
EndIf
Exit
EndIf
SntpTime.Day = PUnixTime + 1
End Sub
End
=]