You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.1 KiB
73 lines
2.1 KiB
#ifndef DATE_H |
|
#define DATE_H |
|
|
|
/** |
|
* The date mode type. This has DATE_NORMAL at an explicit "= 0" to |
|
* accommodate a memset([...], 0, [...]) initialization when "struct |
|
* date_mode" is used as an embedded struct member, as in the case of |
|
* e.g. "struct pretty_print_context" and "struct rev_info". |
|
*/ |
|
enum date_mode_type { |
|
DATE_NORMAL = 0, |
|
DATE_HUMAN, |
|
DATE_RELATIVE, |
|
DATE_SHORT, |
|
DATE_ISO8601, |
|
DATE_ISO8601_STRICT, |
|
DATE_RFC2822, |
|
DATE_STRFTIME, |
|
DATE_RAW, |
|
DATE_UNIX |
|
}; |
|
|
|
struct date_mode { |
|
enum date_mode_type type; |
|
const char *strftime_fmt; |
|
int local; |
|
}; |
|
|
|
#define DATE_MODE_INIT { \ |
|
.type = DATE_NORMAL, \ |
|
} |
|
|
|
/** |
|
* Convenience helper for passing a constant type, like: |
|
* |
|
* show_date(t, tz, DATE_MODE(NORMAL)); |
|
*/ |
|
#define DATE_MODE(t) date_mode_from_type(DATE_##t) |
|
struct date_mode *date_mode_from_type(enum date_mode_type type); |
|
|
|
/** |
|
* Format <'time', 'timezone'> into static memory according to 'mode' |
|
* and return it. The mode is an initialized "struct date_mode" |
|
* (usually from the DATE_MODE() macro). |
|
*/ |
|
const char *show_date(timestamp_t time, int timezone, const struct date_mode *mode); |
|
|
|
/** |
|
* Parse a date format for later use with show_date(). |
|
* |
|
* When the "date_mode_type" is DATE_STRFTIME the "strftime_fmt" |
|
* member of "struct date_mode" will be a malloc()'d format string to |
|
* be used with strbuf_addftime(), in which case you'll need to call |
|
* date_mode_release() later. |
|
*/ |
|
void parse_date_format(const char *format, struct date_mode *mode); |
|
|
|
/** |
|
* Release a "struct date_mode", currently only required if |
|
* parse_date_format() has parsed a "DATE_STRFTIME" format. |
|
*/ |
|
void date_mode_release(struct date_mode *mode); |
|
|
|
void show_date_relative(timestamp_t time, struct strbuf *timebuf); |
|
int parse_date(const char *date, struct strbuf *out); |
|
int parse_date_basic(const char *date, timestamp_t *timestamp, int *offset); |
|
int parse_expiry_date(const char *date, timestamp_t *timestamp); |
|
void datestamp(struct strbuf *out); |
|
#define approxidate(s) approxidate_careful((s), NULL) |
|
timestamp_t approxidate_careful(const char *, int *); |
|
int date_overflows(timestamp_t date); |
|
time_t tm_to_time_t(const struct tm *tm); |
|
#endif
|
|
|