Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809

Boost.Date_Time

06.08.2019, 00:07. Показов 4488. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
25
26
27
28
29
30
31
#include <iostream>
 
#include <boost/date_time.hpp>
#include <boost/date_time/gregorian/greg_date.hpp>
#include <boost/date_time/time_zone_base.hpp>
#include <boost/date_time/c_local_time_adjustor.hpp>
 
namespace pt = boost::posix_time;
namespace g = boost::gregorian;
using local_adj = boost::date_time::c_local_adjustor<pt::ptime>;
 
int main()
{
    try
    {
        boost::posix_time::ptime first(g::date(1970, 1, 1));
        auto result1 = local_adj::utc_to_local(first);
        std::cout << "first: " << pt::to_simple_string(result1) << std::endl;
 
        boost::posix_time::ptime second(g::date(1969, 1, 1));
        auto result2 = local_adj::utc_to_local(second);
        std::cout << "second: " << pt::to_simple_string(result2) << std::endl;
 
    }
    catch (const std::exception& e)
    {
        std::cout << "std::exception: " << e.what() << std::endl;
    }
 
    std::cin.get();
}
first: 1970-Jan-01 03:00:00
std::exception: Cannot convert dates prior to Jan 1, 1970
Вот за что они так со мной?! Почему в библиотеке про время в 2k19 я не могу конвертировать время до 1.1.1970?

Добавлено через 4 минуты
И если так нельзя, то как я могу конвертировать нормально даты раньше 1.1.1970?

Добавлено через 7 минут
Почему такой костыль не был реализован в самой функции?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
boost::posix_time::ptime convert(boost::posix_time::ptime time)
{
    const static boost::posix_time::ptime epoch(boost::gregorian::date(1970, 1, 1));
 
    boost::posix_time::ptime result;
    if (time > epoch)
    {
        result = boost::date_time::c_local_adjustor<boost::posix_time::ptime>::utc_to_local(time);
    }
    else
    {
        auto delt = epoch - time + boost::posix_time::hours(24);
        time = time + delt;
        result = boost::date_time::c_local_adjustor<boost::posix_time::ptime>::utc_to_local(time) - delt;
    }
    return result;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.08.2019, 00:07
Ответы с готовыми решениями:

Date_Time, получение годов от периода времени
Как правильно получить из временного периода количество годов и месяцев?#include &lt;iostream&gt; #include...

Boost начало работы: Undefined reference to `boost::system::generic_category() '
Добрый день Собственно говоря возникла необходимость использовать boost в работе. Поставил так: sudo apt-get install boostlib-all-dev ...

Boost Log - undefined reference to `boost::system::system_category()'
Пытаюсь скомпилировать код из примеров Boost Log:#include &lt;boost/log/trivial.hpp&gt; int main(int, char*) { ...

4
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
06.08.2019, 12:48
Потому что в posix используется UnixTime и соответственно Unix Epoch - 01.01.1970 UTC. Для хранения кол-ва секунд с начала "эпохи" использовался (где-то используется и сейчас) 4-х байтовый знаковый целочисленный тип, который переполнится уже в 2038 году (03:14:07UTC, вторник, 19 января 2038 года). Сейчас же используя 8 байт можно хранить хоть кол-во микросекунд начиная с нулевого года, но по стандарту posix это должно быть кол-во секунд с 1 января 1970 года.
С таким же успехом можно поработать с датами ниже 1600 года в WinAPI (FILETIME/SYSTEMTIME).
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
07.08.2019, 01:52  [ТС]
Цитата Сообщение от Operok Посмотреть сообщение
Потому что в posix используется UnixTime и соответственно Unix Epoch - 01.01.1970 UTC. Для хранения кол-ва секунд с начала "эпохи" использовался (где-то используется и сейчас) 4-х байтовый знаковый целочисленный тип, который переполнится уже в 2038 году (03:14:07UTC, вторник, 19 января 2038 года). Сейчас же используя 8 байт можно хранить хоть кол-во микросекунд начиная с нулевого года, но по стандарту posix это должно быть кол-во секунд с 1 января 1970 года.
С таким же успехом можно поработать с датами ниже 1600 года в WinAPI (FILETIME/SYSTEMTIME).
Это все понятно, что где то на заре программирования что то там было, а сейчас то что?
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
07.08.2019, 12:15
На самом деле исключение бросает функция utc_to_local. Т.е. в boost::posix_time::ptime особых проблем нет и он отлично работает с точками времени ранее 1970 года. Таким образом проблема именно в конвертации ptime к локальной таймзоне (это скорее всего делается через posix функции). Как вариант, можно получить duration локальной таймзоны относительно UTC и добавлять к ptime в ручную.
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
08.08.2019, 06:05  [ТС]
Цитата Сообщение от Operok Посмотреть сообщение
это скорее всего делается через posix функции
Это и так понятно
Цитата Сообщение от Operok Посмотреть сообщение
это скорее всего делается через posix функции
через std::localtime
Цитата Сообщение от Operok Посмотреть сообщение
Как вариант, можно получить duration локальной таймзоны относительно UTC и добавлять к ptime
вот почему они сразу так не реализовали, ужс ужс
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.08.2019, 06:05
Помогаю со студенческими работами здесь

Использование boost и boost.build с несколькими компиляторами
Здравствуйте! Собрал библиотеку boost и boost.build для двух компиляторов: MinGW 4.5.2 и Visual C++ 2010 Express Edition. Для этого...

Метапрограммирование в boost::proto (boost::spirit)
В библиотеке boost:: proto есть такой код calculator&lt;proto::terminal&lt;placeholder&lt;0&gt; &gt;::type&gt; const _1; ...

Qt и boost boost::system::generic_category()
Добрый день Не подскажите как настроить Qt на работу с boost? У меня в принципе все работает: умные указатели и тд. Но когда...

boost::geometry::model::box и boost::geometry::area
Здравствуйте! Пытаюсь измерить площадь box'a :D, но не знаю как правильно это сделать. Вот этот код при компиляции выдает кучу ошибок: ...

Qt и boost
Как правильно прикрутить boost к Qt Creator? Можно ли использовать уже установленный boost для Visual Studio (через инсталятор)? Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru