palm-os-sdk/sdk-1/include/Core/System/DateTime.h
2016-08-25 07:53:48 -03:00

210 lines
5.1 KiB
C

/*******************************************************************
* Pilot Software
*
* Copyright(c) 1995, Palm Computing Inc., All Rights Reserved
*
*-------------------------------------------------------------------
* FileName:
* DateTime.h
*
* Description:
* Date and Time calculations
*
* History:
* 1/19/95 rsf - Created by Roger Flores
*
*
*******************************************************************/
#ifndef __DATETIME_H__
#define __DATETIME_H__
typedef DWord time_t;
typedef struct {
SWord second;
SWord minute;
SWord hour;
SWord day;
SWord month;
SWord year;
SWord weekDay; // Days since Sunday (0 to 6)
} DateTimeType;
typedef DateTimeType * DateTimePtr;
// This is the time format. Times are treated as words so don't
// change the order of the members in this structure.
//
typedef struct {
Byte hours;
Byte minutes;
} TimeType;
typedef TimeType * TimePtr;
#define noTime -1 // The entire TimeType is -1 if there isn't a time.
// This is the date format. Dates are treated as words so don't
// change the order of the members in this structure.
//
typedef struct {
Word year :7; // years since 1904 (MAC format)
Word month :4;
Word day :5;
} DateType;
typedef DateType * DatePtr;
/************************************************************
* Date Time Constants
*************************************************************/
// Maximum lengths of strings return by the date and time formating
// routine DateToAscii and TimeToAscii.
#define timeStringLength 9
#define dateStringLength 9
#define longDateStrLength 15
#define firstYear 1904
#define numberOfYears 128
#define lastYear (firstYear + numberOfYears - 1)
// Constants for time calculations
// Could change these from xIny to yPerX
#define minutesInSeconds 60
#define hoursInMinutes 60
#define hoursInSeconds (hoursInMinutes * minutesInSeconds)
#define hoursPerDay 24
//#define daysInSeconds ((long)(hoursPerDay) * ((long)hoursInSeconds))
#define daysInSeconds (0x15180) // cc bug
#define daysInWeek 7
#define daysInYear 365
#define daysInLeapYear 366
#define daysInFourYears (daysInLeapYear + 3 * daysInYear)
#define monthsInYear 12
#define maxDays ((ULong) numberOfYears / 4 * daysInFourYears - 1)
#define maxSeconds ((ULong) maxDays * daysInSeconds)
#define maxTime 0x
// Values returned by DayOfWeek routine.
#define sunday 0
#define monday 1
#define tuesday 2
#define wednesday 3
#define thursday 4
#define friday 5
#define saturday 6
// Months of the year
#define january 1
#define february 2
#define march 3
#define april 4
#define may 5
#define june 6
#define july 7
#define august 8
#define september 9
#define october 10
#define november 11
#define december 12
// Values returned by DoyOfMonth routine.
typedef enum {
dom1stSun, dom1stMon, dom1stTue, dom1stWen, dom1stThu, dom1stFri, dom1stSat,
dom2ndSun, dom2ndMon, dom2ndTue, dom2ndWen, dom2ndThu, dom2ndFri, dom2ndSat,
dom3rdSun, dom3rdMon, dom3rdTue, dom3rdWen, dom3rdThu, dom3rdFri, dom3rdSat,
dom4thSun, dom4thMon, dom4thTue, dom4thWen, dom4thThu, dom4thFri, dom4thSat,
domLastSun, domLastMon, domLastTue, domLastWen, domLastThu, domLastFri,
domLastSat
} DayOfWeekType;
//************************************************************
//* Date and Time macros
//***********************************************************
// Convert a date in a DateType structure to an unsigned int.
#define DateToInt(date) (*(UInt *) &date)
// Convert a date in a DateType structure to an unsigned int.
#define TimeToInt(time) (*(Int *) &time)
//************************************************************
//* Date Time procedures
//************************************************************
#ifdef __cplusplus
extern "C" {
#endif
void TimSecondsToDateTime(ULong seconds, DateTimePtr dateTimeP)
SYS_TRAP(sysTrapTimSecondsToDateTime);
ULong TimDateTimeToSeconds(DateTimePtr dateTimeP)
SYS_TRAP(sysTrapTimDateTimeToSeconds);
void TimAdjust(DateTimePtr dateTimeP, Long adjustment)
SYS_TRAP(sysTrapTimAdjust);
void TimeToAscii(Byte hours, Byte minutes, TimeFormatType timeFormat,
CharPtr pString)
SYS_TRAP(sysTrapTimeToAscii);
UInt DaysInMonth(UInt month, UInt year)
SYS_TRAP(sysTrapDaysInMonth);
UInt DayOfWeek (UInt month, UInt day, UInt year)
SYS_TRAP(sysTrapDayOfWeek);
UInt DayOfMonth (UInt month, UInt day, UInt year)
SYS_TRAP(sysTrapDayOfMonth);
// Date routines.
void DateSecondsToDate (ULong seconds, DatePtr date)
SYS_TRAP(sysTrapDateSecondsToDate);
void DateDaysToDate (ULong days, DatePtr date)
SYS_TRAP(sysTrapDateDaysToDate);
ULong DateToDays (DateType date)
SYS_TRAP(sysTrapDateToDays);
void DateAdjust (DatePtr dateP, Long adjustment)
SYS_TRAP(sysTrapDateAdjust);
void DateToAscii(Byte months, Byte days, Word years,
DateFormatType dateFormat, CharPtr pString)
SYS_TRAP(sysTrapDateToAscii);
void DateToDOWDMFormat(Byte months, Byte days, Word years,
DateFormatType dateFormat, CharPtr pString)
SYS_TRAP(sysTrapDateToDOWDMFormat);
#ifdef __cplusplus
}
#endif
#endif //__DATETIME_H__