注册 登录
编程论坛 C++教室

C++如何将日期运算之后格式化为日期字符串

md00000000 发布于 2022-11-26 21:16, 1275 次点击
如题,比如给一个时间增加多少秒后转化为 日期-时间 的格式

标准库里有嘛?

还是得自己写?
2 回复
#2
rjsp2022-11-27 13:22
C语言就有,struct tm,localtime 等等
建议你用C语言的这些标准函数,简单

C++的函数别看写得简单,其实内容绕弯弯挺复杂的
程序代码:
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
//using namespace std::chrono_literals;

int main( void )
{
    year_month_day a { year(2022), month(11), day(27) };
    cout << a << endl;

    auto b = local_days(a) + hours(25) + minutes(12) + seconds(31);
    cout << b << endl;
}

输出
2022-11-27
2022-11-28 01:12:31
#3
rjsp2022-11-28 09:02
纯C的做法:

程序代码:
#include <time.h>
#include <stdio.h>

time_t TimeFromLocal( int year, int mon, int day, int hour, int min, int sec )
{
    struct tm t;
    t.tm_year = year-1900;
    t.tm_mon = mon-1;
    t.tm_mday = day;
    t.tm_hour = hour;
    t.tm_min = min;
    t.tm_sec = sec;
    return mktime(&t);
}

void PrintTm( const struct tm* ptm )
{
    printf( "%04d年%02d月%02d日 %02d时%02d分%02d秒 "
        , ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday
        , ptm->tm_hour, ptm->tm_min, ptm->tm_sec );
    printf( "(本年第%d天,星期%d)\n"
        , ptm->tm_yday+1, ptm->tm_wday );
}

int main( void )
{
    time_t t = TimeFromLocal( 2000, 2, 3, 4, 5, 6 );
    PrintTm( localtime(&t) );

    t += 100000; // 增加 100000秒 即 1天3小时46分钟40秒
    PrintTm( localtime(&t) );

    return 0;
}
1