ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   receiver::date_time - класс для работы со временем и зонами (https://forum.antichat.xyz/showthread.php?t=1488989)

Receiver 11.09.2023 15:49

Описание: Класс для работы с датой и временем по Интернет-стандарту. Класс предназначен для работы с 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++:





[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

Receiver 11.09.2023 20:32

Цитата:

Сообщение от kin4stat

просто оставлю это здесь:

std::chrono::time_zone - cppreference.com

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

Цитата:

Сообщение от Digger Man

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

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

kin4stat 11.09.2023 23:45

Цитата:

Сообщение от Receiver

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

bro just use vcpkg

F0RQU1N and 12.09.2023 07:51

Цитата:

Сообщение от kin4stat

bro just use vcpkg

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

kin4stat 12.09.2023 11:00

Цитата:

Сообщение от F0RQU1N and

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

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

Receiver 12.09.2023 11:42

Цитата:

Сообщение от F0RQU1N and

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

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

Цитата:

Сообщение от kin4stat

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

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

Обновление от 12.09.2023:
  • Добавлены операторы для работы с
    Код:

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

kin4stat 12.09.2023 14:06

Цитата:

Сообщение от Receiver

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

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

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

F0RQU1N and 12.09.2023 16:01

Цитата:

Сообщение от Receiver

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

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


Время: 21:01