Форум программистов, компьютерный форум CyberForum.ru

Human Time to Unix Timestamp - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Error LNK1120: неразрешенных внешних элементов: 2 http://www.cyberforum.ru/cpp-beginners/thread1540353.html
Доброго времени суток. Не могу понять в чем ошибка. Подскажите, пожалуйста. Задание: Программно реализовать следующие методы сортировки данных в оперативной памяти: сортировка прямыми включения-ми; корпоративная сортировка. Оценить быстродействие указанных методов и степень естественности их поведения. #include <iostream> #include <stdio.h> #include <stdlib.h> #include <time.h> #include...
C++ Односвязный список с данными о студентах Составить односвязный список на основе класса,объекты которого будут формтировать этот списо. В описание класса должны входить данные для хранения фамилии студента,номера группы,оценок по трём предметам: функции для доступа к отдельным компонентам списка,вывод на экран элементов списк,а так же среднего балла студента,добавление элемента в конец списка ,добавление элемента в начало... http://www.cyberforum.ru/cpp-beginners/thread1540321.html
C++ Функции для ввода/вывода массивов и матриц с помощью шаблонов и перегрузки
#include <iostream> #include <conio.h> using namespace std; template<class T> int mass(T mas, T iSize = sizeof(mas) / sizeof(int)); int mass(mas, iSize = sizeof(mas) / sizeof(int)); for (int ix = 0; ix < iSize; ix++)
C++ Класс "Окружность", три объекта изображающих движение
разработав класс окружность, создать три объекта изображающих движение: а)расширяющейся (сужающейся) окружности с неподвижным центром б)окружность постоянного радиуса, скользящий вдоль прямой в)окружности, осуществляющие два вышеописанных движения и имитирующее приближение (удаление) объекта в перспективе
C++ Rand() генерирует одни и те же числа http://www.cyberforum.ru/cpp-beginners/thread1540278.html
0100010010101010100011111101010101000010 щучу :p Всем привет, не найдя на форуме ответа, решил сделать тему, удалю как получу ответ ]:-> Есть rand() для генерации случайного числа. Но проблема в том , что при запуске программы, этот самый rand() су**,генерирует одни и те же числа, сколько раз не запускай программу. Как заставить его генерировать случайные числа в случайном порядке. Заранее...
C++ Внутреннее устройство потоков Очень тупой вопрос - почему std::ios хранит в своих потрохах указатель на объект std::streambuf, а не является потомком std::streambuf? Принимая во внимание что std::streambuf все равно собран на виртуальных функциях, а значит поведение std::ios один фиг в итоге задается через перегрузку этих самых виртуальных функций. подробнее

Показать сообщение отдельно
pav1uxa
1713 / 1553 / 600
Регистрация: 23.01.2014
Сообщений: 5,609
Завершенные тесты: 1
29.09.2015, 20:48  [ТС]     Human Time to Unix Timestamp
Цитата Сообщение от DrOffset Посмотреть сообщение
Вот, кстати, рабочий пример с timegm в *nix окружении.
http://rextester.com/ZXJZS49318
Чтобы тебе не думалось, что я тебя обманывал
даже не думал так думать) да я и сам находил эту функцию, очень много гуглил прежде чем создать тему.
Цитата Сообщение от DrOffset Посмотреть сообщение
Кстати, ты ведь знаешь, что функции типа localtime, gmtime не потокобезопасны?
нет, я в чистом c/c++ вообще мало чего знаю (оказывается). мне вообще не нравится sscanf и конструкция вида
C++
1
2
3
4
5
6
dt.tm_mday = day;
dt.tm_mon = month - 1;
dt.tm_year = year + 2000 - 1900;
dt.tm_hour = hour;
dt.tm_min = minute;
dt.tm_sec = second;
может это проще делается (стандартными библиотеками), или так сойдет?

Цитата Сообщение от DrOffset Посмотреть сообщение
Т.е. как-то так:
Этот код все равно не дает мне желаемого результата. Мне нужно вводить время в UTC (неважно в каком я часовом поясе, всегда считаем что время вводится в UTC) и получать метку timestamp. Для времени 25.09.15 08:40:00 UTC метка должна быть 1443170400. Все это вообще никак не должно быть привязано ни к каким поясам. В каком бы часовом поясе я не ввел бы 25.09.15 08:40:00, результат всегда должен быть одинм - 1443170400.

В этом примере в моем часовом поясе dt1 отличается от нужного результата на 3, а dt2 уходит еще дальше и отличается на 6.

Добавлено через 10 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
std::time_t cur *= std::time(nullptr);
std::time_t diff = std::difftime(std::mktime(std::gmtime(&cur)), cur);
В принципе похоже на правду, если еще поменять местами аргументы у difftime показывает нормальный результат
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
std::string dateStr2str(std::string input)
{
    std::time_t cur  = std::time(nullptr);
    std::time_t diff = std::difftime(cur, std::mktime(std::gmtime(&cur)));
 
    std::string result = "";
    int day, month, year, hour, minute, second;
 
    std::sscanf(input.c_str(), "%d.%d.%d %d:%d:%d", &day, &month, &year, &hour, &minute, &second);
 
    std::tm dt;
    dt.tm_mday = day;
    dt.tm_mon  = month - 1;
    dt.tm_year = year + 2000 - 1900;
    dt.tm_hour = hour;
    dt.tm_min  = minute;
    dt.tm_sec  = second;
 
    std::time_t t = mktime(&dt);
    t += diff;
 
    result = std::to_string(t);
    return result;
}
Все же хотелось бы привести код к более аккуратному виду. Или сойдет?
 
Текущее время: 02:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru