Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как добавить время в формат при выводе в файл? / 14 сообщений из 14, страница 1 из 1
23.07.2018, 08:40
    #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
23.07.2018, 08:57
    #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
23.07.2018, 11:14
    #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
23.07.2018, 11:38
    #39677564
d7i
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
23.07.2018, 12:39
    #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
23.07.2018, 12:44
    #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
23.07.2018, 12:48
    #39677659
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавить время в формат при выводе в файл?
256kможно и так, но мне надо в файл , и чтобы время туда же

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

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


н, всё-всё
я тоже прикинул что отдельным принтфом проще, чем заморачиваться
...
Рейтинг: 0 / 0
23.07.2018, 13:07
    #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
23.07.2018, 13:17
    #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
23.07.2018, 13:40
    #39677698
256k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавить время в формат при выводе в файл?
Как вывести еще и милисекунды?
...
Рейтинг: 0 / 0
23.07.2018, 14:15
    #39677717
d7i
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
23.07.2018, 17:45
    #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
23.07.2018, 17:49
    #39677848
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавить время в формат при выводе в файл?
std::chrono::time_point не кошерно использовать?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как добавить время в формат при выводе в файл? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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