From: Linus Torvalds Date: Fri, 6 May 2005 22:28:59 +0000 (-0700) Subject: date.c: add "show_date()" function. X-Git-Tag: v0.99~614 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=f80cd783c6f346388bbb0a6a15672be99a71f7ed;p=git.git date.c: add "show_date()" function. Kind of like ctime(), but not as broken. --- diff --git a/cache.h b/cache.h index 80f996705..9de7709f9 100644 --- a/cache.h +++ b/cache.h @@ -166,6 +166,7 @@ extern void *read_object_with_reference(const unsigned char *sha1, unsigned long *size, unsigned char *sha1_ret); +const char *show_date(unsigned long time, int timezone); void parse_date(char *date, char *buf, int bufsize); void datestamp(char *buf, int bufsize); diff --git a/date.c b/date.c index aa4fb3efe..7371bc136 100644 --- a/date.c +++ b/date.c @@ -38,6 +38,34 @@ static const char *weekday_names[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; +/* + * The "tz" thing is passed in as this strange "decimal parse of tz" + * thing, which means that tz -0100 is passed in as the integer -100, + * even though it means "sixty minutes off" + */ +const char *show_date(unsigned long time, int tz) +{ + struct tm *tm; + time_t t; + static char timebuf[200]; + int minutes; + + minutes = tz < 0 ? -tz : tz; + minutes = (tz / 100)*60 + (tz % 100); + minutes = tz < 0 ? -minutes : minutes; + t = time - minutes * 60; + tm = gmtime(&t); + if (!tm) + return NULL; + sprintf(timebuf, "%.3s %.3s %d %02d:%02d:%02d %d %+05d", + weekday_names[tm->tm_wday], + month_names[tm->tm_mon], + tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec, + tm->tm_year + 1900, tz); + return timebuf; +} + /* * Check these. And note how it doesn't do the summer-time conversion. *