C++ C++;:提前10分钟为时间实例指定日期

C++ C++;:提前10分钟为时间实例指定日期,c++,C++,我想获得以下值,以便提前10分钟生成日期时间。然后以以下格式返回新的日期时间:yyyy/mm/dd/HH/mm int yyyy = 2010; int month = 11; int day = 18; int hour = 12; int minute = 10; Datetime? 查看Boost::Date\u Time 编辑:这里有一个例子 /*一些构造和计算时间的简单示例 *输出: *2002-Feb-01 00:00:00-2002-Feb-01 05:04:02.00100

我想获得以下值,以便提前10分钟生成日期时间。然后以以下格式返回新的日期时间:yyyy/mm/dd/HH/mm

int yyyy = 2010;
int month = 11;
int day = 18;
int hour = 12;
int minute = 10;

Datetime?

查看Boost::Date\u Time

编辑:这里有一个例子

/*一些构造和计算时间的简单示例
*输出:
*2002-Feb-01 00:00:00-2002-Feb-01 05:04:02.001000000=-5:04:02.001000000
*/
#包括“boost/date\u time/posix\u time/posix\u time.hpp”
#包括
int
main()
{
使用名称空间boost::posix_time;
使用名称空间boost::gregorian;
日期d(2002年2月1日);//任意日期
//通过将一些持续时间相加来构造一个时间
ptimet1(d,小时(5)+分钟(4)+秒(2)+毫秒(1));
//通过减去一些时间来构造一个新的时间
ptime t2=t1-小时(5)-分钟(4)-秒(2)-毫秒(1);
//通过计算时间差来构建持续时间
持续时间td=t2-t1;
std::cout
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
int-yyy=2010;
整月=11;
整日=18;
整小时=12;
整数分钟=10;
boost::gregorian::date-date(yyyy、月、日);
boost::posix_time::ptime time(日期,
boost::posix_时间::小时(小时)+
增压::posix_时间::分钟(分钟)
);
boost::posix_time::time_facet*facet=新的boost::posix_time::time_facet();
刻面->格式(“%Y/%m/%d/%H/%m”);
std::ostringstream oss;
imbue(std::locale(oss.getloc(),facet));

oss下面是一段可能有效的代码。请在MSDN中查找有关所用函数的更多详细信息。不要忘记用零填充结构

struct tm now;
memset(&now, 0, sizeof(struct tm));

now.tm_year = 2010 - 1900; // years start from 1900
now.tm_mon = 11 - 1; // Months start from 0
now.tm_mday = 18;
now.tm_hour = 12;
now.tm_min = 10; // you have day here, but I guess it's minutes

time_t afterTime = mktime(&now) + 10 * 60; // time_t is time in seconds

struct tm *after = localtime(&afterTime);
<>编辑:我不愿意写一个字符串写日期时间的函数,因为它是C,而不是C++,但有时人们只需要一个解决方案,不介意它来自哪个库。
char output[17]; // 4+1+2+1+2+1+2+1+2 format  +1 zero terminator
if (strftime(output, sizeof(output), "%Y/%m/%d/%H/%M", after) == 0)
   handle_error();

有可能以yyyy/mm/dd/HH/mm格式输出ptime吗?谢谢!是的,看看Chris在我下面的回答。他展示了如何以您需要的格式输出:)Ubuntu上也支持memset吗?有可能以yyyy/mm/dd/HH/mm格式输出吗?谢谢memset是标准CRT f函数,它无处不在。我在答案中为字符串添加了格式化。
struct tm now;
memset(&now, 0, sizeof(struct tm));

now.tm_year = 2010 - 1900; // years start from 1900
now.tm_mon = 11 - 1; // Months start from 0
now.tm_mday = 18;
now.tm_hour = 12;
now.tm_min = 10; // you have day here, but I guess it's minutes

time_t afterTime = mktime(&now) + 10 * 60; // time_t is time in seconds

struct tm *after = localtime(&afterTime);
char output[17]; // 4+1+2+1+2+1+2+1+2 format  +1 zero terminator
if (strftime(output, sizeof(output), "%Y/%m/%d/%H/%M", after) == 0)
   handle_error();