[Back to DATETIME SWAG index] [Back to Main SWAG index] [Original]
{>I noticed that Pascal has Functions called unpacktime() and packtime().
>Does anyone know how these two Functions work? I need either a source
>code example of the equiValent or just a plain algorithm to tell me how
>these two Functions encode or Decode and date/time into a LongInt.
The packed time Format is a 32 bit LongInt as follows:
bits field
---- -----
0-5 = seconds
6-11 = minutes
12-16 = hours
17-21 = days
22-25 = months
26-31 = years
DateTime is a Record structure defined Within the Dos Unit With the
following structure:
DateTime = Record
year,month,day,hour,min,sec : Word
end;
The GetFtime Procedure loads the date/time stamp of an opened File
into a LongInt. UnPackTime extracts the Various bit patterns into the
DateTime Record structure. PackTime will take the Values you Assign
to the DateTime Record structure and pack them into a LongInt - you
could then use SetFTime to update the File date stamp. A small sample
Program follows.
}
Program prg30320;
Uses
Dos;
Var
TextFile : Text;
Filetime : LongInt;
dt : DateTime;
begin
Assign(TextFile,'TextFile.txt');
ReWrite(TextFile);
WriteLn(TextFile,'Hi, I''m a Text File');
GetFtime(TextFile,Filetime);
Close(TextFile);
UnPackTime(Filetime,dt);
WriteLn('File was written: ',dt.month,'/',dt.day,'/',dt.year,
' at ',dt.hour,':',dt.min,':',dt.sec);
ReadLn;
end.
{
The following example shows how to pick apart the packed date/time.
}
Program PKTIME;
Uses
Dos;
Var
dt : DateTime;
pt : LongInt;
Year : 0..127; { Years sInce 1980 }
Month : 1..12; { Month number }
Day : 1..31; { Day of month }
Hour : 0..23; { Hour of day }
Min : 0..59; { Minute of hour }
Sec2 : 0..29; { Seconds divided by 2 }
Procedure GetDateTime(Var dt : DateTime);
{ Get current date and time. Allow For crossing midnight during execution. }
Var
y, m, d, dow : Word;
Sec100 : Word;
begin
GetDate(y, m, d, dow);
GetTime(dt.Hour, dt.Min, dt.Sec, Sec100);
GetDate(dt.Year, dt.Month, dt.Day, dow);
if dt.Day <> d then
GetTime(dt.Hour, dt.Min, dt.Sec, Sec100);
end;
begin
GetDateTime(dt);
PackTime(dt, pt);
Year := (pt shr 25) and $7F;
Month := (pt shr 21) and $0F;
Day := (pt shr 16) and $1F;
Hour := (pt shr 11) and $1F;
Min := (pt shr 5) and $3F;
Sec2 := pt and $1F;
WriteLn(Month, '/', Day, '/', Year+1980);
WriteLn(Hour, ':', Min, ':', Sec2*2);
end.
[Back to DATETIME SWAG index] [Back to Main SWAG index] [Original]