Как я использую функции даты и времени C на UNIX?

В IIS включите анонимный доступ и позвольте web.config обрабатывать аутентификацию пользователя.

6
задан David 1 November 2009 в 14:30
поделиться

1 ответ

Терминология

Дата / время могут быть в двух форматах:

  • календарное время (также известное как простое время) - время как абсолютное значение, обычно начиная с некоторого базового времени, часто называемого Всемирное координированное время
  • местное время (также известное как время с разбивкой) - календарное время, состоящее из компонентов года, месяца, дня и т. Д., Которое учитывает местный часовой пояс, включая летнее время, если применимо.

Типы данных

Функции и типы даты / времени объявлены в заголовочном файле time.h.

Время может быть сохранено как целое число или как экземпляр структуры:

  • как число с использованием time_t арифметический тип - для хранения календарного времени как количества секунд, прошедших с эпохи UNIX 1 января 1970 00:00:00

  • с использованием структуры timeval - для хранения календарного времени как количества секунд и наносекунд, прошедших с эпохи UNIX 1 января 1970 г. 00:00:00

  • с использованием структуры tm для хранения местного времени, он содержит следующие атрибуты:

     tm_hour
    tm_min 
    tm_isdst 
    

Атрибут tm_isdst, приведенный выше, используется для указания перехода на летнее время (DST). Если значение положительное, это DST, если значение 0, это не DST.

Программа для печати текущего всемирного координированного времени

#include <stdio.h>
#include <time.h>

int main ( int argc, char *argv[] )
{
    time_t now;

    now = time ( NULL );

    printf ( "It’s %ld seconds since January 1, 1970 00:00:00", (long) now );

    return 0;
}

В программе выше функция time считывает систему UNIX time, вычитает это из 00:00:00 1 января 1970 года (эпоха UNIX) и возвращает результат в секундах.

Программа для печати текущего местного времени

#include <stdio.h>
#include <time.h>

int main ( int argc, char *argv[] )
{
    time_t now;
    struct tm *lcltime;

    now = time ( NULL );
    lcltime = localtime ( &now );

    printf ( "The time is %d:%d\n", lcltime->tm_hour, lcltime->tm_min );

    return 0;
}

В программе выше функция localtime преобразует прошедшее время в секундах от эпохи UNIX во время с разбивкой по времени. localtime считывает TZ среды UNIX (посредством вызова функции tzset), чтобы вернуть время относительно часового пояса и установить атрибут tm_isdst.

Типичная установка переменной TZ в UNIX (с использованием bash) будет следующей :

export TZ=GMT

или

export TZ=US/Eastern

Программа для печати текущего форматированного среднего времени по Гринвичу

#include <stdio.h>
#include <time.h>

int main ( int argc, char *argv[] )
{
    time_t now;
    struct tm *gmt;
    char formatted_gmt [50];

    now = time ( NULL );
    gmt = gmtime ( &now );

    strftime ( formatted_gmt, sizeof(formatted_gmt), "%I:%M %p", gmt );
    printf ( "The time is %s\n", formatted_gmt );

    return 0;
}

В программе выше функция strftime обеспечивает специальное форматирование дат.

Другие вопросы, которые следует учитывать

16
ответ дан 8 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

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