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?
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?
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.
¿Tiene esta fuga? new bg :: date_facet no tiene la eliminación correspondiente. – CadentOrange
@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
Gracias por la respuesta. – CadentOrange
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.
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