Преобразование времени эпохи на “реальную” дату/время

Можно использовать дурак для отправки электронного письма с вложением

mutt -s "Backup" -a mysqldbbackup.sql backup@email.com < message.txt

23
задан casperOne 31 January 2012 в 14:11
поделиться

3 ответа

Будьте осторожны с високосными годами в вашей функции daysInMonth.

Если вам нужна очень высокая производительность, вы можете предварительно вычислить пару, чтобы получить месяц + год за один шаг, а затем вычислить день /hour/min/sec.

Хорошее решение - в исходном коде gmtime :

/*
 * gmtime - convert the calendar time into broken down time
 */
/* $Header: gmtime.c,v 1.4 91/04/22 13:20:27 ceriel Exp $ */

#include        <time.h>
#include        <limits.h>
#include        "loc_time.h"

struct tm *
gmtime(register const time_t *timer)
{
        static struct tm br_time;
        register struct tm *timep = &br_time;
        time_t time = *timer;
        register unsigned long dayclock, dayno;
        int year = EPOCH_YR;

        dayclock = (unsigned long)time % SECS_DAY;
        dayno = (unsigned long)time / SECS_DAY;

        timep->tm_sec = dayclock % 60;
        timep->tm_min = (dayclock % 3600) / 60;
        timep->tm_hour = dayclock / 3600;
        timep->tm_wday = (dayno + 4) % 7;       /* day 0 was a thursday */
        while (dayno >= YEARSIZE(year)) {
                dayno -= YEARSIZE(year);
                year++;
        }
        timep->tm_year = year - YEAR0;
        timep->tm_yday = dayno;
        timep->tm_mon = 0;
        while (dayno >= _ytab[LEAPYEAR(year)][timep->tm_mon]) {
                dayno -= _ytab[LEAPYEAR(year)][timep->tm_mon];
                timep->tm_mon++;
        }
        timep->tm_mday = dayno + 1;
        timep->tm_isdst = 0;

        return timep;
}
18
ответ дан 29 November 2019 в 02:19
поделиться

Это в значительной степени зависит от того, какой файл система, в которой вы собираетесь хранить файлы. Возможности файловых систем по работе с большим количеством файлов сильно различаются.

Ваш коллега по существу предлагает использовать структуру данных Trie . Использование такой структуры каталогов означало бы, что на каждом уровне каталогов есть только несколько файлов / каталогов на выбор; gmtime () или localtime () преобразует time_t (секунды с начала эпохи, т. Е. 1 января 1970 г., 00:00:00) в struct tm . Затем strftime () можно использовать для преобразования struct tm в строку ( char * ) на основе указанного вами формата.

см .: http://www.cplusplus.com/reference/clibrary/ctime/

Расчет даты и времени может оказаться непростым. Гораздо лучше использовать существующее решение, чем пытаться разворачивать собственное, если у вас нет действительно веской причины.

см .: http://www.cplusplus.com/reference/clibrary/ctime/

Вычисление даты / времени может оказаться сложным. Намного лучше использовать существующее решение, чем пытаться разворачивать собственное, если у вас нет действительно веской причины.

см .: http://www.cplusplus.com/reference/clibrary/ctime/

Расчет даты / времени может оказаться сложным. Намного лучше использовать существующее решение, чем пытаться разворачивать собственное, если у вас нет действительно веской причины.

14
ответ дан 29 November 2019 в 02:19
поделиться

Если ваш исходный тип времени - time_t, вы должны использовать функции из time.h, то есть gmtime и т. д. . получить переносимый код. Стандарты C / C ++ не определяют внутренний формат (или даже точный тип) для time_t, поэтому вы не можете напрямую преобразовывать или манипулировать значениями time_t.

Все, что известно, это то, что time_t - это «арифметический тип», но результаты арифметических операции не указаны - даже сложить / вычесть достоверно нельзя. На практике многие системы используют целочисленный тип для time_t с внутренним форматом секунд с эпохи, но это не предусмотрено стандартами.

Короче говоря, используйте gmtime (и time.

0
ответ дан 29 November 2019 в 02:19
поделиться
Другие вопросы по тегам:

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