Use the "AmigaTime" as the standard interchange data type, which is; (uint32) Seconds {since the 1st,Jan,1978}
and then convert it to and from the different structures with the appropriate library functions. ie;
The timer.device normally operates on "AmigaTime" via a struct TimeVal {uint32 Seconds; uint32 Microseconds;}
The DOS library also has; IDOS->DateStamp( struct DateStamp *ds ); Which also can return "AmigaTime". (seconds) in IoErr().
The utility library has the AmigaTime to ClockData convertor functions;
uint32 seconds = IUtility->Date2Amiga(struct ClockData *cd);
void IUtility->Amiga2Date(uint32 seconds,struct ClockData *cd);
Then you have the other DOS functions to convert between AmigaTime and DOS DateStamps;
struct DateStamp *ds = IDOS->SecondsToDateStamp( uint32 seconds, struct DateStamp *ds );
uint32 seconds = IDOS->DateStampToSeconds( struct DateStamp *ds );
You also have the date formatting function that are in DOS;
int32 success = IDOS->DateToStr( struct DateTime *datetime );
int32 success = IDOS->StrToDate( struct DateTime * datetime );