PDA

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


Receiver
11.09.2023, 15:49
Описание: Класс для работы с датой и временем по Интернет-стандарту. Класс предназначен для работы с Windows и работает с его API. Временные зоны берутся из реестра Windows. Вы можете найти их всех по этому пути:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Win dows NT\CurrentVersion\Time Zones

. Все функции задокументированы в коде, вы можете разобраться сами, посмотрев файл

src/date_time.h

. Метод

date_time::current

использует время UTC без часового пояса. Вы можете установить пояс самостоятельно, используя

date_time::set_timezone

. Вы так же можете инициализировать класс с помощью timestamp.

Демонстрация:

Очень краткий пример всего функционала: парсинг и форматирование по стандарту ISO_8601, а также указание начального часового пояса.

C++:





[CODE]
std
::
cout



Вы можете добавить/отнять секунды/минуты/часы/дни через std::chrono:

C++:





[CODE]
using
namespace
std
::
chrono_literals
;
std
::
cout



Исходник: https://github.com/Receiver1/date_time

Digger Man52
11.09.2023, 19:35
У Буста есть date time, по сути он более практичен в этих вопросах

kin4stat
11.09.2023, 19:45
просто оставлю это здесь:

std::chrono::time_zone - cppreference.com (https://www.blast.hk/redirect/aHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2Nocm 9uby90aW1lX3pvbmU)

Receiver
11.09.2023, 20:32
просто оставлю это здесь:

std::chrono::time_zone - cppreference.com (https://www.blast.hk/redirect/aHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2Nocm 9uby90aW1lX3pvbmU)


https://lightrun.com/answers/compil...-stdchronocurrent_zone-crashes-on-msvc-builds (https://www.blast.hk/redirect/aHR0cHM6Ly9saWdodHJ1bi5jb20vYW5zd2Vycy9jb21waWxlci 1leHBsb3Jlci1jb21waWxlci1leHBsb3Jlci1zdGRjaHJvbm9j dXJyZW50X3pvbmUtY3Jhc2hlcy1vbi1tc3ZjLWJ1aWxkcw)

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



У Буста есть date time, по сути он более практичен в этих вопросах


Хорошо, подключай себе в проект boost datetime, который тянет за собой ещё несколько библиотек. И это всё ради того чтобы в паре мест обработать приходящее с сервера время.

kin4stat
11.09.2023, 23:45
Хорошо, подключай себе в проект boost datetime, который тянет за собой ещё несколько библиотек. И это всё ради того чтобы в паре мест обработать приходящее с сервера время.


bro just use vcpkg

F0RQU1N and
12.09.2023, 07:51
bro just use vcpkg


так это не отменяет того что у тебя бинарник будет весит мегабайт как минимум(или еще хуже дллки будут какие-то рядом валятся)

kin4stat
12.09.2023, 11:00
так это не отменяет того что у тебя бинарник будет весит мегабайт как минимум(или еще хуже дллки будут какие-то рядом валятся)


Сейчас бы 200 кб экономить в 2023, когда рядом Discord на электроне не думает даже об экономии мегабайтов

Receiver
12.09.2023, 11:42
так это не отменяет того что у тебя бинарник будет весит мегабайт как минимум(или еще хуже дллки будут какие-то рядом валятся)


Если линкуешь статически, то DLL'ок не будет. На счёт веса полная правда.



Сейчас бы 200 кб экономить в 2023, когда рядом Discord на электроне не думает даже об экономии мегабайтов


Тем не менее тащить за собой кучу кода ради одного datetime не очень сообразительно. Если ты хороший разработчик, то должен позаботится так же о размере бинарника. Ты сможешь предугадать как он будет вести себя под протектом? Ты сможешь предугадать как он поведёт себя в незвестной среде выполнения? Сейчас расскажу забавный факт: оказыватся OpenSSL при инициализации вызывает под капотом GetModuleHandleW, который всего возвращает NULL под EAC. Реализация boost независима от системы, в то время как этот класс заточен конкретно под Windows без лишних запросов и библиотек. Он использует всего 1 импорт, который есть во всех сборках Windows - advapi32.dll. Тоже самое касается и OpenSSL: какой смысл тянуть себе в проект такую обширную библиотеку ради шифрования, когда есть CNG (https://www.blast.hk/redirect/aHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL3J1LXJ1L3dpbm Rvd3Mvd2luMzIvc2VjY25nL2NuZy1wb3J0YWw) и ты точно знаешь что твое приложение будет работать только под Windows?

Обновление от 12.09.2023:


Добавлены операторы для работы с

value_type = long long

;

Исправлен код операторов сложения и вычитания;

kin4stat
12.09.2023, 14:06
Тем не менее тащить за собой кучу кода ради одного datetime не очень сообразительно. Если ты хороший разработчик, то должен позаботится так же о размере бинарника. Ты сможешь предугадать как он будет вести себя под протектом?


NIH-синдром короче, понятно.

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

F0RQU1N and
12.09.2023, 16:01
Если линкуешь статически, то DLL'ок не будет. На счёт веса полная правда.


ну так я про это и сказал если статик то большой вес, если нет то дохуя дллок всяких))))

Dark_Knight
03.10.2023, 00:50
Сейчас бы 200 кб экономить в 2023, когда рядом Discord на электроне не думает даже об экономии мегабайтов


Или амайзинг РП лаунчер который юзает гектар оперативы просто чтобы файлики скачать))))

Receiver
07.10.2023, 13:00
Или амайзинг РП лаунчер который юзает гектар оперативы просто чтобы файлики скачать))))


Да реально, по*** ваще, братан. Пусть делает операционную систему kin4OS, которая будет при установке компьютер взрывать, и в idle состоянии выжирать фулл оперативку. А что? Ресурсы компьютера нужно использовать на максимум!)

Dark_Knight
07.10.2023, 13:48
Да реально, по*** ваще, братан. Пусть делает операционную систему kin4OS, которая будет при установке компьютер взрывать, и в idle состоянии выжирать фулл оперативку. А что? Ресурсы компьютера нужно использовать на максимум!)


Сарказм твой не уместен, но я просто не вижу иногда резона в економии места. А про размер исходящего файла вообще молчу. Пару метров лишних не создадут проблемы