import sys
import os
if(len(sys.argv) != 2):
sys.exit("usage %s 0xdead" % os.path.basename(sys.argv[0]))
if((sys.argv[1].startswith("0x")!=True) or (len(sys.argv[1])!=6 )):
sys.exit("0x prefixed hexinput must be in range 0x0000 to 0xffff padded to 4 digits")
indate = int(sys.argv[1],16)
year = str(((indate & 0xfe00) >> 9) + 2000)
month = str((indate & 0x01e0) >> 5)
day = str((indate & 0x001f) >> 0)
sep = "/"
print "The date is in MSDOS DATE FORMAT"
print "y2k-fixed year9to15 bits month 5t08bits and day 0to5 bits"
print (day+sep+month+sep+year)
0x245a as input
:\>python msdosdate.py 0x245a
The date is in MSDOS DATE FORMAT
y2k-fixed year9to15 bits month 5t08bits and day 0to5 bits
26/2/2018
Edited a complete script that takes all the three short ints
:>cat makedatetime.py
import sys
if(len(sys.argv) != 4):
sys.exit("usage python thisscript.py 1337 dead d00d")
for i in range(1,4,1):
if(len(sys.argv[i]) != 4):
sys.exit("enter unsigned short integer of type 'H' in hex \n"
"like dead d00d 1337 babe etc duly padded to 4 digits")
indate = int(sys.argv[1],16)
inminute = int(sys.argv[2],16)
inseconds = int(sys.argv[3],16)
year = str(((indate &0xfe00) >> 9)+2000)
month = str(((indate &0x01e0) >> 5)+0000)
day = str(((indate &0x001f) >> 0)+0000)
hours = str(inminute/60)
minutes = str(inminute%60)
seconds = str(inseconds/1000)
millisecs = str(inseconds%1000)
print(month+"/"+day+"/"+year+" "+hours+":"+minutes+":"+seconds+":"+millisecs)
:>python makedatetime.py 245A 03B1 AE73
2/26/2018 15:45:44:659
:>python makedatetime.py 245A 03FC BC83
2/26/2018 17:0:48:259
:>python makedatetime.py 245A 03FE E393
2/26/2018 17:2:58:259