acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
aaa_dostime.cpp File Reference

Functions to convert times between Unix and MS-DOS times. More...

#include "framework.h"
#include "dostime1.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

Functions

dos_time_t minimum_dos_time ()
 Return the minimum possible value.
dos_time_t maximum_dos_time ()
 Return the maximum possible value .
posix_time dos_time_unix_time (dos_time_t dostime)
 Convert a DOS time to a Unix time.
dos_time_t dos_time (::i32 year, ::i32 month, ::i32 day, ::i32 hour, ::i32 minute, ::i32 second)
dos_time_t unix_time_dos_time (posix_time unix_time)
 Convert a Unix date to a DOS date.

Detailed Description

Functions to convert times between Unix and MS-DOS times.

These functions make use of the old date and time format defined to implement the FAT file system. This is defined on the Microsoft website here:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724247%28v=vs.85%29.aspx

As a quick recap, we have:

Date (actually we view those as bit 16 to 31)

0-4 Day of the month (1-31)
5-8 Month (1 = January, 2 = February, and so on)
9-15 Year offset from 1980 (add 1980 to get actual year)

Time

0-4 Second divided by 2
5-10 Minute (0-59)
11-15 Hour (0-23 on a 24-hour clock)
Definition aaaa_hour.h:7
Note
This implementation uses C code.

Function Documentation

◆ dos_time_unix_time()

posix_time dos_time_unix_time ( dos_time_t dostime)

Convert a DOS time to a Unix time.

This function returns the Unix posix_time value (GMT/UTC time) from the DOS format (local) time dostime, where dostime is a four ::u8 value (date in most significant word, time in least significant word), see dostime() function.

If the input DOS time is invalid, then the function returns -1.

Note
If the dostime is not valid (one of the parameters is out of range) then the function returns -1.
Parameters
[in]dostimeA DOS time value as found in a zip file.
Returns
The DOS time converted to a Unix time or -1.
See also
dostime()

\FIXME Maximum for tm_mday depends on month/year.

◆ maximum_dos_time()

dos_time_t maximum_dos_time ( )

Return the maximum possible value .

This function returns the maximum DOS time that can be represented in a dos_time_t parameter.

At this time we use a 32 bit field (like the Zip archive) so the maximum is Dec 31, 2107 23:59:59.

Note
To get the corresponding Unix time, use the dos2unixtime() as in:
posix_time max(dos2unixtime(maxdostime()));
Definition posix_time.h:8
Returns
The largest possible DOS time.

◆ minimum_dos_time()

dos_time_t minimum_dos_time ( )

Return the minimum possible value.

This function returns the minimum DOS time that can be represented in a dos_time_t parameter.

At this time we use a 32 bit field (like the Zip archive) so the maximum is Dec 31, 2107 23:59:59.

Note
To get the corresponding Unix time, use the dos2unixtime() as in:
posix_time min(dos2unixtime(mindostime()));
Returns
The smallest possible DOS time.

◆ unix_time_dos_time()

dos_time_t unix_time_dos_time ( posix_time unix_time)

Convert a Unix date to a DOS date.

This function return the Unix posix_time converted in DOS format, rounded up to the next even second.

Parameters
[in]unix_timeA Unix posix_time value.
Returns
The Unix date in DOS format unless it is out of range for a DOS time and date in which case zero (0) is returned.