libc, seconds: new time and date apis (try 2)
Redo date handling in libc almost entirely. This allows handling dates and times from outside your timezones, fixes timezone loading in multithreaded applications, and allows parsing and formatting using custom format strings. As a test of the APIs, we replace the formatting code in seconds(1), shrinking it massively. The last commit missed a few removals, and made it unnecessarily hard to do an update.
This commit is contained in:
parent
f380851ddb
commit
8b3efcfc4e
7 changed files with 1207 additions and 900 deletions
|
@ -314,22 +314,45 @@ extern double fmod(double, double);
|
|||
/*
|
||||
* Time-of-day
|
||||
*/
|
||||
typedef struct Tzone Tzone;
|
||||
#pragma incomplete Tzone
|
||||
|
||||
|
||||
typedef
|
||||
struct Tm
|
||||
{
|
||||
int sec;
|
||||
int min;
|
||||
int hour;
|
||||
int mday;
|
||||
int mon;
|
||||
int year;
|
||||
int wday;
|
||||
int yday;
|
||||
char zone[4];
|
||||
int tzoff;
|
||||
vlong abs; /* seconds since Jan 1 1970, GMT */
|
||||
int nsec; /* nseconds (range 0...1e9) */
|
||||
int sec; /* seconds (range 0..60) */
|
||||
int min; /* minutes (0..59) */
|
||||
int hour; /* hours (0..23) */
|
||||
int mday; /* day of the month (1..31) */
|
||||
int mon; /* month of the year (0..11) */
|
||||
int year; /* year A.D. */
|
||||
int wday; /* day of week (0..6, Sunday = 0) */
|
||||
int yday; /* day of year (0..365) */
|
||||
char zone[16]; /* time zone name */
|
||||
int tzoff; /* time zone delta from GMT */
|
||||
Tzone *tz; /* time zone associated with this date */
|
||||
} Tm;
|
||||
|
||||
typedef
|
||||
struct Tmfmt {
|
||||
char *fmt;
|
||||
Tm *tm;
|
||||
} Tmfmt;
|
||||
|
||||
#pragma varargck type "τ" Tmfmt
|
||||
|
||||
extern Tzone* tmgetzone(char *name);
|
||||
extern Tm* tmnow(Tm*, Tzone*);
|
||||
extern Tm* tmtime(Tm*, vlong, Tzone*);
|
||||
extern Tm* tmtimens(Tm*, vlong, int, Tzone*);
|
||||
extern Tm* tmparse(Tm*, char*, char*, Tzone*);
|
||||
extern Tm* tmnorm(Tm*);
|
||||
extern Tmfmt tmfmt(Tm*, char*);
|
||||
extern void tmfmtinstall(void);
|
||||
|
||||
extern Tm* gmtime(long);
|
||||
extern Tm* localtime(long);
|
||||
extern char* asctime(Tm*);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue