EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++

Как конвертировать unix time в std::string?

Основная цель: сконвертировать UNIX time в std::string


Когда я попытался заюзать подобный код:

std::string unixtimeToString( time_t ts )
{
    // _CRT_SECURE_NO_WARNINGS
    enum  { numCStringSize = 0x80 };
    const char strTimestampFmt[] = "%a, %Y-%b-%d, %H:%M:%S";

    char timeCStr[ numCStringSize ];

    std::tm * tmInfo = gmtime( &ts );

    std::strftime( &timeCStr[0], numCStringSize, strTimestampFmt, tmInfo );

    return std::string( timeCStr );
}



То получил справедливый варнинг от MS Visual Studio 2008 компиллера с кодом 4996.


Поэтому переписал на более безопасный:
std::string  unixtimeToString( uint32_t timeStamp )
{
    using namespace boost::posix_time;
    using namespace boost::gregorian;

    ptime unixEpoche( date( 1970, Jan, 1 ) );
    ptime ts(  unixEpoche + time_duration( 0, 0, timeStamp ) );

    return to_simple_string( ts );
}



Но при таком коде моя тулза работающая на большом кол-ве файлах(папка c:\windows\ на Win 7 x64 sp1) начала притормаживать.


Сейчас передо мною три варианта:

1) Подавить сообщение о варнинге 4996 #pragma warning(push) -> #pragma warning(disable:4996) -> мой код -> #pragma warning(pop)

2) Подавить на уровне проекта, заюзав в опциях проекта _CRT_SECURE_NO_WARNINGS

3) Тоже самое что и п.1, но вынести отключение\включение во внешние инклуды вида disable_warning\restore_warning и это даст возможность еще и портабельно варнинги отключать.


Мне оба первых варианта не нравятся. В случае п.2 приходится согласиться на то что компиллер совсем меня не будет извещать о возможных багах. В случае п.1 падает читабельность кода, пусть даже и не намного, но все равно как-то не хочется.


В виду того что в голове каша хочется спросить у других кто как поступал?


ЗЫ:

Сильно не бейте ;)
  • Вопрос задан
  • 5195 просмотров
Решения вопроса 1
bogolt
@bogolt
По-моему самое разумное вынести код функции в отдельный файл, и обернуть его pragma push/pop с отключением надоедливого ворнинга.

Насчет медленной работы вашей программы используя преобразование через буст — это немного странно ведь если вы обращаетесь к каждому файлу а затем преобразовываете время, то очевидно что именно обращение к файловой системе должно быть узким местом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы