Как получить текущую дату UTC в boost? - PullRequest
6 голосов
/ 03 мая 2011

Учитывая, что это основной вопрос, я думаю, что могут быть дубликаты, но я не смог их найти.Я просто хочу получить текущую iso_date (например, 20110503) из boost.

Какие-нибудь указатели?

Ответы [ 2 ]

11 голосов
/ 03 мая 2011

Я полагаю, вы ищете решение на основе Boost.Date_Time ?

#include <locale>
#include <string>
#include <iostream>
#include <sstream>
#include <boost/date_time/gregorian/gregorian.hpp>

std::string utc_date()
{
    namespace bg = boost::gregorian;

    static char const* const fmt = "%Y%m%d";
    std::ostringstream ss;
    // assumes std::cout's locale has been set appropriately for the entire app
    ss.imbue(std::locale(std::cout.getloc(), new bg::date_facet(fmt)));
    ss << bg::day_clock::universal_day();
    return ss.str();
}

См. Дата и время ввода / вывода для получения дополнительной информации о доступных флагах формата.

7 голосов
/ 07 марта 2014

Чтобы напечатать текущую дату и время в UTC, вы можете использовать этот код (сохранить как datetime.cpp):

#include <iostream>

// Not sure if this function is really needed.
namespace boost { void throw_exception(std::exception const & e) {} }

// Includes
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/local_time_adjustor.hpp>
#include <boost/date_time/c_local_time_adjustor.hpp>

int main(int argc, char *argv[])
{
    // Code
    using boost::posix_time::ptime;
    using boost::posix_time::second_clock;
    using boost::posix_time::to_simple_string;
    using boost::gregorian::day_clock;

    ptime todayUtc(day_clock::universal_day(), second_clock::universal_time().time_of_day());
    std::cout << to_simple_string(todayUtc) << std::endl;

    // This outputs something like: 2014-Mar-07 12:56:55

    return 0;
}

Вот код CMake для настройки вашей сборки (сохранить как CMakeLists.txt):

cmake_minimum_required(VERSION 2.8.8)

project(datetime)

find_package(Boost COMPONENTS date_time REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})

add_executable(datetime datetime.cpp)

target_link_libraries(datetime ${Boost_LIBRARIES})

Поместите оба файла в каталог или клонируйте мои фрагменты, используя git clone https://gist.github.com/9410910.git datetime. Для сборки программы выполните следующие команды: cd datetime && cmake . && make && ./datetime.

Вот мои фрагменты: https://gist.github.com/kwk/9410910

Надеюсь, это кому-нибудь пригодится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...