B4R Question Byte array to date-time elements

Mostez

Well-Known Member
Licensed User
Longtime User
Hello,
I receive date-time array from HMI device in this form '16092103132021' I would like to separate date time elements in byte values but i get very different results:
16 09 21 03 13 20 21
year month day day-week hr mn sc

B4X:
        Dim RAF As RandomAccessFile
        RAF.Initialize(CurrentDateTime, False) 
       
       
        Dim hex_str As String
        hex_str=BC.HexFromBytes(CurrentDateTime) 'just to debug
       
        DWIN_YEAR = RAF.ReadByte(0)
        DWIN_MONTH = RAF.ReadByte(1)
        DWIN_DAY = RAF.ReadByte(2)
        DWIN_WEEK_DAY = RAF.ReadByte(3)
        DWIN_HOUR = RAF.ReadByte(4)
        DWIN_MINUT = RAF.ReadByte(5)
        DWIN_SECOND = RAF.ReadByte(6)
            
        Log(hex_str) 'i get 16092103132021
        Log(DWIN_YEAR) 'i get 22 instead of 16
 

inakigarm

Well-Known Member
Licensed User
Longtime User
EDITED:

16 hex= 22 decimal, 16 decimal =22 hex, you'll have to convert to decimal or use another function/code other than hexfrombytes
 
Last edited:
Upvote 0

Mostez

Well-Known Member
Licensed User
Longtime User
CurrentDateTime holds date-time in decimal format, it should converted to hex to be 'readable' 22d >> 16h means 2016
I dont know really how to solve this problem, i just did this test:
B4X:
Dim hex_str As String
        hex_str = BC.HexFromBytes(CurrentDateTime)
        Dim yr As String
        Dim tmp_array(1) As Byte

        tmp_array(0) = CurrentDateTime(0) 'get year byte (0)
        yr = BC.HexFromBytes(tmp_array) 'convert to hex string
        Log(hex_str) '16092103151603
        Log(yr)        '16
 
Upvote 0

Mostez

Well-Known Member
Licensed User
Longtime User
Thank you all so much for great help, it worked like this,

B4X:
Dim hex_str As String
        hex_str = BC.HexFromBytes(CurrentDateTime)
   
        DWIN_YEAR = BC.StringFromBytes(BC.SubString2(hex_str, 0, 2))
        DWIN_MONTH = BC.StringFromBytes(BC.SubString2(hex_str, 2, 4))
        DWIN_DAY = BC.StringFromBytes(BC.SubString2(hex_str, 4, 6))
        DWIN_WEEK_DAY = BC.StringFromBytes(BC.SubString2(hex_str, 6, 8))
        DWIN_HOUR = BC.StringFromBytes(BC.SubString2(hex_str, 8, 10))
        DWIN_MINUT = BC.StringFromBytes(BC.SubString2(hex_str, 10, 12))
        DWIN_SECOND = BC.StringFromBytes(BC.SubString2(hex_str, 12, 14))
            
        Log(hex_str) '16092103154817
        Log(DWIN_YEAR,DWIN_MONTH,DWIN_DAY,DWIN_WEEK_DAY,DWIN_HOUR,DWIN_MINUT,DWIN_SECOND) '169213154817
 
Upvote 0

Tayfur

Well-Known Member
Licensed User
Longtime User
Hello,
I receive date-time array from HMI device in this form '16092103132021' I would like to separate date time elements in byte values but i get very different results:
16 09 21 03 13 20 21
year month day day-week hr mn sc

B4X:
        Dim RAF As RandomAccessFile
        RAF.Initialize(CurrentDateTime, False)
      
      
        Dim hex_str As String
        hex_str=BC.HexFromBytes(CurrentDateTime) 'just to debug
      
        DWIN_YEAR = RAF.ReadByte(0)
        DWIN_MONTH = RAF.ReadByte(1)
        DWIN_DAY = RAF.ReadByte(2)
        DWIN_WEEK_DAY = RAF.ReadByte(3)
        DWIN_HOUR = RAF.ReadByte(4)
        DWIN_MINUT = RAF.ReadByte(5)
        DWIN_SECOND = RAF.ReadByte(6)
           
        Log(hex_str) 'i get 16092103132021
        Log(DWIN_YEAR) 'i get 22 instead of 16


Hello;

I writo some code for time /date; may be help you.

https://www.b4x.com/android/forum/threads/sub-for-date-time-adding.70621/
 
Upvote 0
Top