Исходник receiver::date_time - класс для работы со временем и зонами

Receiver

🥩 Передай meat, всё в скип, я в темпе
Автор темы
Проверенный
597
819
Описание: Класс для работы с датой и временем по Интернет-стандарту. Класс предназначен для работы с Windows и работает с его API. Временные зоны берутся из реестра Windows. Вы можете найти их всех по этому пути: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones. Все функции задокументированы в коде, вы можете разобраться сами, посмотрев файл src/date_time.h. Метод date_time::current использует время UTC без часового пояса. Вы можете установить пояс самостоятельно, используя date_time::set_timezone. Вы так же можете инициализировать класс с помощью timestamp.
Демонстрация:
Очень краткий пример всего функционала: парсинг и форматирование по стандарту ISO_8601, а также указание начального часового пояса.
C++:
std::cout << date_time{"2023-09-07T00:00:00Z", date_format::ISO_8601,
                    time_zone{"Russia TZ 2 Standard Time"}}.format(date_format::ISO_8601) << std::endl;
Вы можете добавить/отнять секунды/минуты/часы/дни через std::chrono:
C++:
using namespace std::chrono_literals;
std::cout << (date_time{"2023-09-07T00:00:00Z"} + 15min)
                 .format(date_format::ISO_8601)
          << std::endl;
Исходник: https://github.com/Receiver1/date_time
 
Последнее редактирование:

Digger Man

Любитель Linux
Модератор
1,635
1,116
У Буста есть date time, по сути он более практичен в этих вопросах
 
  • Эм
Реакции: F0RQU1N and

Receiver

🥩 Передай meat, всё в скип, я в темпе
Автор темы
Проверенный
597
819
просто оставлю это здесь:

https://lightrun.com/answers/compil...-stdchronocurrent_zone-crashes-on-msvc-builds
Если ты не знал std::chrono::time_zone крашит на большинстве сборок Windows из-за устаревшей версии icu.dll, потому что Microsoft забыли поместить новую DLL в VC++ Redistributable. Почему-то обновлять его они не очень спешат. Ещё std::chrono::time_zone нужно инетрнет соединение для парсинга базы данных IANA

У Буста есть date time, по сути он более практичен в этих вопросах
Хорошо, подключай себе в проект boost datetime, который тянет за собой ещё несколько библиотек. И это всё ради того чтобы в паре мест обработать приходящее с сервера время.
 
Последнее редактирование:
  • Нравится
Реакции: F0RQU1N and и etereon

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
так это не отменяет того что у тебя бинарник будет весит мегабайт как минимум(или еще хуже дллки будут какие-то рядом валятся)
Сейчас бы 200 кб экономить в 2023, когда рядом Discord на электроне не думает даже об экономии мегабайтов
 
  • Ха-ха
Реакции: Z3roKwq

Receiver

🥩 Передай meat, всё в скип, я в темпе
Автор темы
Проверенный
597
819
так это не отменяет того что у тебя бинарник будет весит мегабайт как минимум(или еще хуже дллки будут какие-то рядом валятся)
Если линкуешь статически, то DLL'ок не будет. На счёт веса полная правда.
Сейчас бы 200 кб экономить в 2023, когда рядом Discord на электроне не думает даже об экономии мегабайтов
Тем не менее тащить за собой кучу кода ради одного datetime не очень сообразительно. Если ты хороший разработчик, то должен позаботится так же о размере бинарника. Ты сможешь предугадать как он будет вести себя под протектом? Ты сможешь предугадать как он поведёт себя в незвестной среде выполнения? Сейчас расскажу забавный факт: оказыватся OpenSSL при инициализации вызывает под капотом GetModuleHandleW, который всего возвращает NULL под EAC. Реализация boost независима от системы, в то время как этот класс заточен конкретно под Windows без лишних запросов и библиотек. Он использует всего 1 импорт, который есть во всех сборках Windows - advapi32.dll. Тоже самое касается и OpenSSL: какой смысл тянуть себе в проект такую обширную библиотеку ради шифрования, когда есть CNG и ты точно знаешь что твое приложение будет работать только под Windows?

Обновление от 12.09.2023:
  • Добавлены операторы для работы с value_type = long long;
  • Исправлен код операторов сложения и вычитания;
 
Последнее редактирование:
  • Нравится
Реакции: legendabrn и Z3roKwq

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Тем не менее тащить за собой кучу кода ради одного datetime не очень сообразительно. Если ты хороший разработчик, то должен позаботится так же о размере бинарника. Ты сможешь предугадать как он будет вести себя под протектом?
NIH-синдром короче, понятно.

Я бы предпочел все же проверенную временем библиотеку
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Сейчас бы 200 кб экономить в 2023, когда рядом Discord на электроне не думает даже об экономии мегабайтов
Или амайзинг РП лаунчер который юзает гектар оперативы просто чтобы файлики скачать))))
 

Receiver

🥩 Передай meat, всё в скип, я в темпе
Автор темы
Проверенный
597
819
Или амайзинг РП лаунчер который юзает гектар оперативы просто чтобы файлики скачать))))
Да реально, похуй ваще, братан. Пусть делает операционную систему kin4OS, которая будет при установке компьютер взрывать, и в idle состоянии выжирать фулл оперативку. А что? Ресурсы компьютера нужно использовать на максимум!)
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Да реально, похуй ваще, братан. Пусть делает операционную систему kin4OS, которая будет при установке компьютер взрывать, и в idle состоянии выжирать фулл оперативку. А что? Ресурсы компьютера нужно использовать на максимум!)
Сарказм твой не уместен, но я просто не вижу иногда резона в економии места. А про размер исходящего файла вообще молчу. Пару метров лишних не создадут проблемы