2011-05-03 33 views
6

Dado que esta es una pregunta básica, imagino que podría haber duplicados, pero no pude encontrar ninguno. Simplemente quiero que la iso_date actual (como 20110503) aumente.¿Cómo obtener la fecha actual UTC en impulso?

¿Alguna sugerencia?

+0

No es estrictamente una respuesta de impulso (o C++), pero puede usar 'time()', 'gmtime()' y 'strftime()' para hacer esto de forma razonablemente fácil. Consulte aquí http://www.cplusplus.com/reference/clibrary/ctime/strftime/ – msandiford

Respuesta

11

Supongo que está buscando una solución basada en 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(); 
} 

Ver Date Time Input/Output para más información sobre las banderas de formato disponibles.

+0

¿Tiene esta fuga? new bg :: date_facet no tiene la eliminación correspondiente. – CadentOrange

+2

@CadentOrange: en este caso, el 'locale' se encarga de limpiar las facetas que se le dan; vea esta pregunta para obtener más detalles: [Propiedad/eliminación de la faceta en una configuración regional (std :: locale)] (http://stackoverflow.com/q/5330459/636019). – ildjarn

+0

Gracias por la respuesta. – CadentOrange

6

para imprimir la fecha y la hora actuales en UTC, puede utilizar este código (guardar como 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; 
} 

Aquí está el código CMake para configurar su construcción (guardar como 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}) 

Poner ambos archivos en un directorio o clonar mis fragmentos usando git clone https://gist.github.com/9410910.git datetime. Para construir el programa, ejecute estos comandos: cd datetime && cmake . && make && ./datetime.

Éstos son mis fragmentos: https://gist.github.com/kwk/9410910

Espero que esto sea útil para alguien.

Cuestiones relacionadas