Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перевести дату из миллисекунд в нормальный вид? 
:(
    Опции темы
Андрей
Дата 16.12.2002, 18:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Доброго дня!
Вот пишу свою вторую порогу по подсчету трафика на подобие сарга. Основывается она на логах сквида. Поскольку только учусь программировать решил для начало  написать сие под винды . Все более и менее понятно алгоритм составил но не хватает практических знаний. Лог сквида выглядит так :

  Время          байты             урл                          ип
1009003201    32424    http://www.yandex.ru 10.10.10.10

Проблема моя в следующем, как мне перевести дату из миллисекунд в нормальный вид?
  Вверх
Baa
Дата 16.12.2002, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



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


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Андрей
Дата 16.12.2002, 19:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да ты прав это кол-во сикунд истекшие начиная с 01.01.1970
с помощью перла все очень просто реализуется perl -e '(102900222)."\n"', я, конечно, мог бы запускать скрипт с помощью крона преобразовывать дату и по фтп качать на виндовую тачку, а там иметь обработанный файл, но этот вариант мне не слишком по душе хотелось бы одно программой все обрабатывать
  Вверх
bercut
  Дата 17.12.2002, 01:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Guest @ 16.12.2002, 11:14)
Да ты прав это кол-во сикунд истекшие начиная с 01.01.1970
с помощью перла все очень просто реализуется perl -e '(102900222)."\n"', я, конечно, мог бы запускать скрипт с помощью крона преобразовывать дату и по фтп качать на виндовую тачку, а там иметь обработанный файл, но этот вариант мне не слишком по душе хотелось бы одно программой все обрабатывать

Подключаешь библиотеку #include <time.h> и используешь функцию ctime().
  Вверх
Klin
  Дата 17.12.2002, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: нет
Всего: 25



Делить!
:D


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Baa
Дата 17.12.2002, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



unixtodos
dostounix


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Андрей
Дата 17.12.2002, 22:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подскажите пожалуйста, что тут не так, почему дата выводится не так как нужно . Например я ввожу 1029003201 , а он мне выводит следующие

thu jan 01 03:00:49 1970

хотя ,  я точно знаю, что дата долж быть другой.

#include <stdio.h>
#include <time.h>
int main(void)
{
  char ut[9];
  gets(ut);

  time_t lt;
  lt = *ut;
  printf(ctime(&lt));

  return 0;
}
  Вверх
AntonSaburov
Дата 17.12.2002, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата(Guest @ 17.12.2002, 14:57)
Подскажите пожалуйста, что тут не так, почему дата выводится не так как нужно . Например я ввожу 1029003201 , а он мне выводит следующие

thu jan 01 03:00:49 1970

хотя ,  я точно знаю, что дата долж быть другой.

#include <stdio.h>
#include <time.h>
int main(void)
{
  char ut[9];
  gets(ut);

  time_t lt;
  lt = *ut;
  printf(ctime(&lt));

  return 0;
}

Так аргумент у ctime(long integer), а ты ему что скормил ?
Ну и получил в ответ.

если у тебя char ut[9]
тогда можно использовать что-то типа такого

printf(ctime(atol(ut)));

Только тогда уж не забудь в конце массива ut нули забить.
PM MAIL WWW ICQ   Вверх
bercut
Дата 17.12.2002, 23:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Guest @ 17.12.2002, 14:57)
Подскажите пожалуйста, что тут не так, почему дата выводится не так как нужно . Например я ввожу 1029003201 , а он мне выводит следующие

thu jan 01 03:00:49 1970

хотя ,  я точно знаю, что дата долж быть другой.

#include <stdio.h>
#include <time.h>
int main(void)
{
  char ut[9];
  gets(ut);

  time_t lt;
  lt = *ut;
  printf(ctime(&lt));

  return 0;
}

Все она так выводит, т.к. ctime была позаимствона из UNIX, вследствии чего вот такой формат вывода. Я лично переводил этот формат в свой вот таким образом, а ты можешь придумать что-нибудь другое, хотя возможно есть другие способы:

String Str1;
String Strs = ctime(&t);
 if (Strs.SubString(1,3) == "Mon") Str1 = "Пн ";
 if (Strs.SubString(1,3) == "Tue") Str1 = "Вт ";
 if (Strs.SubString(1,3) == "Wed") Str1 = "Ср ";
 if (Strs.SubString(1,3) == "Thu") Str1 = "Чт ";
 if (Strs.SubString(1,3) == "Fri") Str1 = "Пт ";
 if (Strs.SubString(1,3) == "Sat") Str1 = "Сб ";
 if (Strs.SubString(1,3) == "Sun") Str1 = "Вс ";
 Str1 = Str1 + Strs.SubString(9,2);
 if (Strs.SubString(5,3) == "Jan") Str1 = Str1 + ".01.";
 if (Strs.SubString(5,3) == "Feb") Str1 = Str1 + ".02.";
 if (Strs.SubString(5,3) == "Mac") Str1 = Str1 + ".03.";
 if (Strs.SubString(5,3) == "Apr") Str1 = Str1 + ".04.";
 if (Strs.SubString(5,3) == "May") Str1 = Str1 + ".05.";
 if (Strs.SubString(5,3) == "Jun") Str1 = Str1 + ".06.";
 if (Strs.SubString(5,3) == "Jul") Str1 = Str1 + ".07.";
 if (Strs.SubString(5,3) == "Aug") Str1 = Str1 + ".08.";
 if (Strs.SubString(5,3) == "Sep") Str1 = Str1 + ".09.";
 if (Strs.SubString(5,3) == "Oct") Str1 = Str1 + ".10.";
 if (Strs.SubString(5,3) == "Nov") Str1 = Str1 + ".11.";
 if (Strs.SubString(5,3) == "Dec") Str1 = Str1 + ".12.";
 Str1 = Str1 + Strs.SubString(21,4);
 Str1 = Str1 + " " + Strs.SubString(12,8);
 Label->Caption = Str1;
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.