powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как добавить время в формат при выводе в файл?
14 сообщений из 14, страница 1 из 1
Как добавить время в формат при выводе в файл?
    #39677502
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть моя функция с переменным числом аргументов, которая внутри вызывает вывод в файл, типа такого:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void myprint(const char *fmt,...)
{
...
                va_start(args, fmt);		
		vfprintf(f, fmt, args); 
		va_end(args);
}




Хочу внутри функции добавить еще и дату время

Код: plaintext
1.
2.
3.
	struct tm tm;
	char stime[32];
	strftime(stime, 32, "%F %H:%M:%S", &tm);



Простой выход - выводить запись с датой отдельно, но думаю можно ли вдрюкать в ту же строку в начале?
...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677508
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
char buf[4096];
char *p = buf + strftime(buf, 32, "%F %H:%M:%S", &tm);

va_start(args, fmt);		
vfprintf(p, fmt, args); 
va_end(args);
...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677548
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Код: plaintext
1.
2.
3.
4.
5.
6.
char buf[4096];
char *p = buf + strftime(buf, 32, "%F %H:%M:%S", &tm);

va_start(args, fmt);		
vfprintf(p, fmt, args); 
va_end(args);



ок
Кстати,почему-то при таком формате, когда вывожу в файл

fprintf(stderr, "%s", strtime);

какую-то хрень выводит, а не дату в виде 2018-07-23 06:53:17

то 1900...., то вообще какие-то числа странные
...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677564
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#include <iostream.h>
#include <stdio.h>
#include <time.h>
......
    time_t  tm;
    auto char buf[26];
    FILE    *fp;
 .............

      fp = fopen( "PNlog.txt", "at" );
      tm = time(NULL);
      strftime(buf,25,"\n%d-%m-%Y %H:%M:%S",localtime(&tm));
      fprintf(fp,"%s",buf);
................... 
...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677654
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А лично я не парюсь и не трачу время на копирование из одного буфера в другой перед
копированием в файловый буфер:
Код: sql
1.
2.
3.
4.
5.
6.
    char time_buf[50];
     time_t t = time(NULL);
     if (strftime(time_buf, sizeof(time_buf), "%Y-%m-%d %H:%M:%S\t", gmtime(&t)) != 0)
         fputs(time_buf, stdout);

     vprintf(fmt, args);


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677657
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА лично я не парюсь и не трачу время на копирование из одного буфера в другой перед
копированием в файловый буфер:
Код: sql
1.
2.
3.
4.
5.
6.
    char time_buf[50];
     time_t t = time(NULL);
     if (strftime(time_buf, sizeof(time_buf), "%Y-%m-%d %H:%M:%S\t", gmtime(&t)) != 0)
         fputs(time_buf, stdout);

     vprintf(fmt, args);




можно и так, но мне надо в файл , и чтобы время туда же
vfprintf(p, fmt, args); ..
...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677659
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kможно и так, но мне надо в файл , и чтобы время туда же

Второй параметр у fputs это что по-твоему?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677672
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov256kможно и так, но мне надо в файл , и чтобы время туда же

Второй параметр у fputs это что по-твоему?


н, всё-всё
я тоже прикинул что отдельным принтфом проще, чем заморачиваться
...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677680
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kDima T
Код: plaintext
1.
2.
3.
4.
5.
6.
char buf[4096];
char *p = buf + strftime(buf, 32, "%F %H:%M:%S", &tm);

va_start(args, fmt);		
vfprintf(p, fmt, args); 
va_end(args);



ок
Кстати,почему-то при таком формате, когда вывожу в файл

fprintf(stderr, "%s", strtime);

какую-то хрень выводит, а не дату в виде 2018-07-23 06:53:17

то 1900...., то вообще какие-то числа странные
Вот рабочий кусок кода вывода в строку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
static void lite_log(int err, const char* data, ...) noexcept {
	va_list ap;
	va_start(ap, data);
	char buf[LITE_LOG_BUF_SIZE];

	time_t rawtime;
	time(&rawtime);

	size_t size = 0;
	char* p = buf;

#ifdef WIN32
	struct tm timeinfo;
	localtime_s(&timeinfo, &rawtime);
	if(err > 0) {
		size += sprintf_s(p, LITE_LOG_BUF_SIZE - size, "%02d.%02d.%02d %02d:%02d:%02d !!! ERROR %d: ", timeinfo.tm_mday, timeinfo.tm_mon, timeinfo.tm_year % 100, timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec, err);
	} else {
		size += sprintf_s(p, LITE_LOG_BUF_SIZE - size, "%02d.%02d.%02d %02d:%02d:%02d ", timeinfo.tm_mday, timeinfo.tm_mon, timeinfo.tm_year % 100, timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec);
	}
	p += size;
	size += vsprintf_s(p, LITE_LOG_BUF_SIZE - size, data, ap);
	p += size;
#else
	struct tm * timeinfo;
	timeinfo = localtime(&rawtime);
	if (err > 0) {
		size += snprintf(p, LITE_LOG_BUF_SIZE - size, "%02d.%02d.%02d %02d:%02d:%02d !!! ERROR %d: ", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year % 100, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, err);
	} else {
		size += snprintf(p, LITE_LOG_BUF_SIZE - size, "%02d.%02d.%02d %02d:%02d:%02d ", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year % 100, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
	}
	p += size;
	size += vsnprintf(p, LITE_LOG_BUF_SIZE - size, data, ap);
	p += size;
#endif
	va_end(ap);
	assert(size < LITE_LOG_BUF_SIZE);
	*p = 0;
...

...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677690
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T256kпропущено...


ок
Кстати,почему-то при таком формате, когда вывожу в файл

fprintf(stderr, "%s", strtime);

какую-то хрень выводит, а не дату в виде 2018-07-23 06:53:17

то 1900...., то вообще какие-то числа странные
Вот рабочий кусок кода вывода в строку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
static void lite_log(int err, const char* data, ...) noexcept {
	va_list ap;
	va_start(ap, data);
	char buf[LITE_LOG_BUF_SIZE];

	time_t rawtime;
	time(&rawtime);

	size_t size = 0;
	char* p = buf;

#ifdef WIN32
	struct tm timeinfo;
	localtime_s(&timeinfo, &rawtime);
	if(err > 0) {
		size += sprintf_s(p, LITE_LOG_BUF_SIZE - size, "%02d.%02d.%02d %02d:%02d:%02d !!! ERROR %d: ", timeinfo.tm_mday, timeinfo.tm_mon, timeinfo.tm_year % 100, timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec, err);
	} else {
		size += sprintf_s(p, LITE_LOG_BUF_SIZE - size, "%02d.%02d.%02d %02d:%02d:%02d ", timeinfo.tm_mday, timeinfo.tm_mon, timeinfo.tm_year % 100, timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec);
	}
	p += size;
	size += vsprintf_s(p, LITE_LOG_BUF_SIZE - size, data, ap);
	p += size;
#else
	struct tm * timeinfo;
	timeinfo = localtime(&rawtime);
	if (err > 0) {
		size += snprintf(p, LITE_LOG_BUF_SIZE - size, "%02d.%02d.%02d %02d:%02d:%02d !!! ERROR %d: ", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year % 100, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, err);
	} else {
		size += snprintf(p, LITE_LOG_BUF_SIZE - size, "%02d.%02d.%02d %02d:%02d:%02d ", timeinfo->tm_mday, timeinfo->tm_mon, timeinfo->tm_year % 100, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
	}
	p += size;
	size += vsnprintf(p, LITE_LOG_BUF_SIZE - size, data, ap);
	p += size;
#endif
	va_end(ap);
	assert(size < LITE_LOG_BUF_SIZE);
	*p = 0;
...




спасибо, я нашел уже, мой косяк...
...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677698
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вывести еще и милисекунды?
...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677717
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kКак вывести еще и милисекунды?
Windows API функция GetSystemTime. Она использует структуру

typedef struct _SYSTEMTIME { // st
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677846
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7i256kКак вывести еще и милисекунды?
Windows API функция GetSystemTime. Она использует структуру

typedef struct _SYSTEMTIME { // st
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;

мне на Макосе пока надо
...
Рейтинг: 0 / 0
Как добавить время в формат при выводе в файл?
    #39677848
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
std::chrono::time_point не кошерно использовать?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как добавить время в формат при выводе в файл?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]