Как я могу генерировать Строку даты RFC1123 из кода C (Win32)

RFC1123 определяет много вещей, среди них, формата Дат, которые будут использоваться в протоколах Интернета. HTTP (RFC2616) указывает, что форматы даты должны быть сгенерированы в соответствии с RFC1123.

Это похоже на это:

Date: Wed, 28 Apr 2010 02:31:05 GMT

Как я могу генерировать строку времени RFC1123 из кода C, работая на Windows? У меня нет использования C# и DateTime. ToString ().

Я знаю, что мог написать код сам, для испускания часовых поясов и дневных сокращений но я надеюсь, это уже существует в Windows API.

Спасибо.

5
задан Cheeso 28 April 2010 в 05:13
поделиться

3 ответа

Вот что я использовал:

static const char *DAY_NAMES[] =
  { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
static const char *MONTH_NAMES[] =
  { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };

char *Rfc1123_DateTimeNow()
{
    const int RFC1123_TIME_LEN = 29;
    time_t t;
    struct tm tm;
    char * buf = malloc(RFC1123_TIME_LEN+1);

    time(&t);
    gmtime_s(&tm, &t);

    strftime(buf, RFC1123_TIME_LEN+1, "---, %d --- %Y %H:%M:%S GMT", &tm);
    memcpy(buf, DAY_NAMES[tm.tm_wday], 3);
    memcpy(buf+8, MONTH_NAMES[tm.tm_mon], 3);

    return buf;
}
9
ответ дан 18 December 2019 в 13:12
поделиться

Это не проверено, но должно быть достаточно близко:

time_t t = time(NULL);
struct tm *my_tm = gmtime(&t);
strftime(buffer, buf_size, "%a, %d %b %Y %H:%M:%S GMT", my_tm);
puts(buffer);
2
ответ дан 18 December 2019 в 13:12
поделиться

Возможно, InternetTimeFromSystemTime из Wininet API.

Используемый формат RFC. В настоящее время единственный допустимый формат - это INTERNET_RFC1123_FORMAT.

2
ответ дан 18 December 2019 в 13:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: