Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: C++ Хочу получить текущую дату.  (Прочитано 7935 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ripper-tm

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
  • Ещё учусь, извиняйте :)
    • Просмотр профиля
C++ Хочу получить текущую дату.
« : 15 Ноября 2009, 18:44:46 »
Сабж.
AMD Phenom II x4 945, PowerColor AX5850, ASRock M3N78D
1680x1050

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля

Оффлайн Ripper-tm

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
  • Ещё учусь, извиняйте :)
    • Просмотр профиля
Re: C++ Хочу получить текущую дату.
« Ответ #2 : 15 Ноября 2009, 19:00:01 »
Насколько я понял, первый вариант выдаёт целую готовую строку (а я хочу по отдельности день, месяц, год), а второй работает только в виндах

Пользователь решил продолжить мысль 15 Ноября 2009, 19:05:51:
кстати, у вас скоро 1000 пост! Поздравляю!  :coolsmiley:
« Последнее редактирование: 15 Ноября 2009, 19:05:51 от Ripper-tm »
AMD Phenom II x4 945, PowerColor AX5850, ASRock M3N78D
1680x1050

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: C++ Хочу получить текущую дату.
« Ответ #3 : 15 Ноября 2009, 19:13:09 »
http://forum.shelek.ru/index.php/topic,5352.0.html
http://forum.shelek.ru/index.php/topic,4505.0.html
http://www.gnu.org/software/libc/manual/html_node/Calendar-Time.html#Calendar%20Time
вот эти еще посмотри, вообще в поиск попробуй заглянуть ;)
кстати, у вас скоро 1000 пост! Поздравляю!  :coolsmiley:
спс

Оффлайн Ripper-tm

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
  • Ещё учусь, извиняйте :)
    • Просмотр профиля
Re: C++ Хочу получить текущую дату.
« Ответ #4 : 15 Ноября 2009, 20:50:37 »
Вот что вышло:
#include <iostream>
// #include <fstream> // Рано ещё
#include <time.h>

// #define ROOT "/var/www/stats/" // Обождём

using namespace std;

void getlocaltime(tm *result);

int main (void) {
tm *loctime;
getlocaltime(loctime);
char year[3];
year[3] = '\x0'; // Предохраняюсь
strftime(year, 2, "%d", loctime);
cout << year << endl;
return 0;
}

void getlocaltime(tm *result) {
time_t curtime;
curtime = time(NULL);
result = localtime(&curtime);
}
Цитировать
ripper@ripper-laptop:~/Рабочий стол/C++$ g++ prog.cpp -o prog.cgi
ripper@ripper-laptop:~/Рабочий стол/C++$ ./prog.cgi
�s�
ripper@ripper-laptop:~/Рабочий стол/C++$ ./prog.cgi
oo�
ripper@ripper-laptop:~/Рабочий стол/C++$ ./prog.cgi
[�
Видимо, какой-то баг с указателем char *year

Пользователь решил продолжить мысль 15 Ноября 2009, 16:52:47:
Сам сделать не могу  :(
« Последнее редактирование: 16 Ноября 2009, 07:12:19 от Ripper-tm »
AMD Phenom II x4 945, PowerColor AX5850, ASRock M3N78D
1680x1050

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: C++ Хочу получить текущую дату.
« Ответ #5 : 15 Ноября 2009, 21:18:39 »
ну что я вам могу сказать...
ман вам в руки )))

Оффлайн Sova777

  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
    • Несколько слов о NetBeans C/C++ Pack'е
Re: C++ Хочу получить текущую дату.
« Ответ #6 : 16 Ноября 2009, 01:18:32 »
#include <iostream>
// #include <fstream> // Рано ещё
#include <time.h>

// #define ROOT "/var/www/stats/" // Обождём

using namespace std;

void getlocaltime(tm *result);

int main (void) {
tm loctime;
getlocaltime(&loctime);
char year[3];
year[3] = '\0'; // Предохраняюсь
strftime(year, 3, "%d", &loctime);
cout << year << endl;
return 0;
}

void getlocaltime(tm *result) {
time_t curtime;
curtime = time(NULL);
result = localtime(&curtime);
}
Пользователь OpenSolaris 2008.11, Ubuntu 8.10, Windows XP. Mac OS X не нравится, стараюсь не использовать.

Оффлайн Ripper-tm

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
  • Ещё учусь, извиняйте :)
    • Просмотр профиля
Re: C++ Хочу получить текущую дату.
« Ответ #7 : 16 Ноября 2009, 05:49:58 »
Не помогло. Опять выводится то же самое

Пользователь решил продолжить мысль 16 Ноября 2009, 03:15:12:
Ай, нашёл одну ошибку:
Цитировать
16. year[ 3 2] = '\x0'; // Предохраняюсь
Однако, не помогло
« Последнее редактирование: 16 Ноября 2009, 07:16:04 от Ripper-tm »
AMD Phenom II x4 945, PowerColor AX5850, ASRock M3N78D
1680x1050

Оффлайн Sova777

  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
    • Несколько слов о NetBeans C/C++ Pack'е
Re: C++ Хочу получить текущую дату.
« Ответ #8 : 16 Ноября 2009, 12:46:44 »
Добавив отладочную печать, всё становится ясно
#include <iostream>
// #include <fstream> // Рано ещё
#include <time.h>
#include <cstdio>
// #define ROOT "/var/www/stats/" // Обождём

using namespace std;

void getlocaltime(tm *result);

int main (void) {
tm *loctime;
        printf("MAIN1: %p\n", loctime);
getlocaltime(loctime);
char year[3];
year[3] = '\x0'; // Предохраняюсь
        printf("MAIN2: %p\n", loctime);
strftime(year, 2, "%d", loctime);
cout << year << endl;
return 0;
}

void getlocaltime(tm *result) {
time_t curtime;
curtime = time(NULL);
        printf("Before: %p\n", result);
result = localtime(&curtime);
        printf("After: %p\n", result);
}

MAIN1: (nil)
Before: (nil)
After: 0x2b0185436ce0
MAIN2: (nil)

Функция getlocaltime(tm() ничего не возвращает.
Пользователь OpenSolaris 2008.11, Ubuntu 8.10, Windows XP. Mac OS X не нравится, стараюсь не использовать.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: C++ Хочу получить текущую дату.
« Ответ #9 : 16 Ноября 2009, 13:09:55 »
/*
int main (void) {
   tm *loctime;
        printf("MAIN1: %p\n", loctime);
*/
Пояснение автору топика. Здесь указателю указан тип, но он не проинициализирован значением (поэтому и nil).

Оффлайн Ripper-tm

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
  • Ещё учусь, извиняйте :)
    • Просмотр профиля
Re: C++ Хочу получить текущую дату.
« Ответ #10 : 16 Ноября 2009, 15:52:55 »
Спасибо! Проблему с функцией решил. Добавил инициализацию, поправил указатели (пометил зелёным), добавил штучку для дебага (синий)
Цитировать
#include <iostream>
//#include <fstream> // Рано ещё
#include <time.h>
#include <stdio.h>

//#define ROOT "/var/www/stats/" // Обождём

using namespace std;

void getlocaltime(tm *result);

int main (void) {
   tm *loctime = new tm; // <==
   getlocaltime(loctime);
   char year[3];
   year[2] = 'x0';
   strftime(year, 2, "%d", loctime);
   cout << year << endl;

   fputs(asctime(loctime), stdout); // Debug

   return 0;
}

void getlocaltime(tm *result) {
   time_t curtime;
   curtime = time(NULL);
   *result = *localtime(&curtime); // <==
}
Синяя строка теперь работает нормально, но с strftime всеравно проблемы:
Цитировать
ripper@ripper-laptop:~/Рабочий стол/C++$ ./prog.cgi
b�
Mon Nov 16 15:49:48 2009


Пользователь решил продолжить мысль 16 Ноября 2009, 15:58:38:
УРА! Работает!
Цитировать
#include <iostream>
//#include <fstream> // Рано ещё
#include <time.h>
#include <stdio.h>

//#define ROOT "/var/www/stats/" // Обождём

using namespace std;

void getlocaltime(tm *result);

int main (void) {
   tm *loctime = new tm;
   getlocaltime(loctime);
   char year[3];
   strftime(year, 3, "%d", loctime);
   cout << year << endl;
   return 0;
}

void getlocaltime(tm *result) {
   time_t curtime;
   curtime = time(NULL);
   *result = *localtime(&curtime);
}
Цитировать
ripper@ripper-laptop:~/Рабочий стол/C++$ ./prog.cgi
16
Всем спасибо!!
« Последнее редактирование: 16 Ноября 2009, 15:58:38 от Ripper-tm »
AMD Phenom II x4 945, PowerColor AX5850, ASRock M3N78D
1680x1050

 

Страница сгенерирована за 0.028 секунд. Запросов: 25.