Как мне установить объект C ++ time_t для эпохи? - PullRequest
0 голосов
/ 03 мая 2018

Этот вопрос похож на следующее:

преобразование эпохи в time_t

Преобразование time_t в int

но у меня там не совсем мой ответ.

Если вы хотите получить текущую дату / время, вы можете позвонить time(0) или time(NULL), как в следующем стандартном примере:

// current date/time based on current system
   time_t now = time(0);

Я хочу определить функцию, которая будет возвращать time_t и позволяет клиенту передавать необязательное возвращаемое значение по умолчанию в случае ошибки. Кроме того, я хочу установить значение по умолчанию для этого аргумента «по умолчанию». Это обеспечивает симметрию в библиотеке, которую я имею, с частями счетчика один к одному на нескольких языках, поэтому я не собираюсь перестраивать все это.

Я думал о том, чтобы установить возврат по умолчанию в эпоху. Затем клиент мог бы теоретически легко оценить это возвращение и решить, что возвращение эпохи было более чем вероятно (если не всегда) указанием на то, что оно недействительно. Я могу придумать некоторые альтернативы, но ничего чистого, что также соответствует моим существующим моделям.

Есть ли короткий и приятный способ сделать так, чтобы сигнатура функции имела значение по умолчанию для этого объекта, равное эпохе? Например

   ...myfunc(...., const time_t &defVal=time(0) );

было бы идеально, если бы 0 означало эпоху, а не текущую дату / время!

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Что не так с использованием 0? (time_t)0 представляет саму эпоху (если вы хотите найти фактическую дату / время эпохи, передайте (time_t)0 в gmtime() или localtime()).

time_t myfunc(...., time_t defVal = 0 );

Или, вместо этого, вы можете использовать (time_t)-1, что не является допустимым временем, так как time() возвращает (time_t)-1 при ошибке, а time_t представляет положительное количество секунд с начала эпохи. .

time_t myfunc(...., time_t defVal = (time_t)-1 );

В любом случае пользователю предоставляется что-то, что легко сравнивается, если они не предоставляют свое собственное значение по умолчанию.

0 голосов
/ 03 мая 2018

Функция std::time() возвращает количество секунд с начала эпохи как std::time_t. Поэтому, чтобы найти ноль секунд после эпохи, установите std::time_t в ноль:

std::time_t t = 0;

Так что вы можете сделать что-то вроде:

void myfunc(const std::time_t& defVal = 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...