C++格式化输出时间

目录

前言

格式化时间代码实现

time函数

struct tm结构体

localtime函数

put_time函数


前言

        使用time函数tm结构体local函数put_time函数实现格式化输出时间。

形如[2024-06-14 18:19:14]


格式化时间代码实现

void Print_Time()
{
    // 获取当前时间戳
    time_t now_time = time(nullptr);
    // 将time_t 转换为tm结构
    std::tm* local = localtime(&now_time);
    // 格式化输出当前时间
    std::cout << std::put_time(local, "%Y-%m-%d %H:%M:%S") << " ";
}
int main()
{
    Print_Time();
	return 0;
}

输出结果如下

2024-06-14 20:30:05


time函数

原型:time_t time(time_t *tloc);

头文件:<ctime>

返回值:当前时间的时间戳

参数:这是一个指向 time_t 类型对象的指针。如果此参数不为空(即不是nullptrNULL),则函数会将当前时间存储在这个对象中。如果此参数为空,则函数会忽略它。


struct tm结构体

struct tm
{
    int tm_sec;   // 秒数 - [0, 60] 包含闰秒
    int tm_min;   // 分钟数 - [0, 59]
    int tm_hour;  // 小时(24小时制) - [0, 23]
    int tm_mday;  // 一个月中的日期 - [1, 31]
    int tm_mon;   // 月份 - [0, 11]
    int tm_year;  //  从1900开始算的年份
    int tm_wday;  // 星期几 0表示周日 - [0, 6]
    int tm_yday;  // 一年中的第几天 - [0, 365]
    int tm_isdst; // 夏令时标识符
};

localtime函数

原型:struct tm *localtime(const time_t *timep);
头文件:<ctime>

返回值:函数返回一个指向 tm 结构体的指针,该结构体包含了本地时间的详细信息(日期、时间等)。如果函数失败,它将返回空指针(nullptr)。

参数:这是一个指向 time_t 类型对象的指针,该对象包含了一个以秒为单位的时间戳。


put_time函数

原型

        template <class charT>

        put_time( const struct tm* tmb, const charT* fmt);

头文件:<iomanip>

功能:用于格式化输出 tm 类型的数据。

返回值:函数返回对输入流os的引用,以便进行链式调用。

参数功能
const struct tm* tmb存取着待格式化输出的时间数据
const charT* fmt一个 C 风格的字符串,指定了日期和时间的格式。这个字符串可以包含多种格式说明符

格式说明符

%a缩写的星期几名称(如Sun)。
%A完整的星期几名称(如Sunday)。
%b缩写的月份名称(如Jan)。
%B完整的月份名称(如January)。
%c日期和时间的完整表示(如Wed Jun 30 21:49:08 2023\n\t)。
%C年份除以100的整数部分(如20表示2000-2099)。
%d一个月中的第几天(01-31)。
%D等同于%m/%d/%y。
%e一个月中的第几天(1-31),前面没有前导零。
%F等同于%Y-%m-%d(ISO 8601日期格式)。
%g与%G相同,但不包含世纪。
%G基于ISO 8601的年份(四位数)。
%h等同于%b。
%H小时(00-23)。
%I小时(01-12)。
%j一年中的第几天(001-366)。
%m月份(01-12)。
%M分钟(00-59)。
%n换行符。
%pAM或PM(用于12小时制)。
%r12小时制的时间表示(如11:11:04 PM)。
%R等同于%H:%M。
%S秒(00-60)。
%t水平制表符。
%T等同于%H:%M:%S。
%u星期几(1-7),1表示星期一,7表示星期天(与POSIX的%u不同)。
%U一年中的第几周,星期天作为一周的第一天(00-53)。
%VISO 8601的一年中的第几周(01-53)
%w星期几(0-6),0表示星期天。
%W一年中的第几周,星期一作为一周的第一天(00-53)。
%x日期表示(如06/30/2023)。
%X时间表示(如21:49:08)。
%y年份的最后两位(00-99)。
%Y年份(四位数)。
%%输出%字符。

感谢阅读

### C++ 中的格式化输出 #### 使用 `fixed` 和 `precision` 为了精确控制浮点数的小数位数,可以使用 `std::cout << std::fixed` 来设置固定的小数点表示法,并通过 `std::setprecision()` 函数指定小数点后的位数。这有助于提高数值显示的一致性和准确性[^1]。 ```cpp #include <iostream> #include <iomanip> int main() { double value = 123.456789; // 设置固定的浮点数格式并指定位宽为3个小数位 std::cout << std::fixed << std::setprecision(3); std::cout << "Formatted output: " << value << '\n'; } ``` 此代码片段展示了如何利用 `std::fixed` 和 `std::setprecision(int n)` 方法来调整输出流中的浮点数格式。 #### 利用 `setw`, `left/right`, 及 `fill` 对于字符串或整型数据类型的对齐操作以及设定字段宽度,可以通过调用 `std::setw(size_t width)` 配合 `std::left` 或者 `std::right` 实现左/右对齐功能;还可以借助 `std::setfill(char ch)` 自定义填充字符[^2]。 ```cpp #include <iostream> #include <iomanip> int main(){ int num = 42; // 设定字段宽度为10,默认右侧对齐 std::cout << std::setw(10) << num << "\n"; // 左侧对齐并以星号(*)作为填充符 std::cout << std::left << std::setfill('*') << std::setw(10) << num << "\n"; } ``` 上述例子说明了怎样运用这些成员函数完成基本的数据格式化需求。 #### 时间日期格式化 当涉及到时间戳或者特定格式的时间串处理时,则需引入 `<ctime>` 库里的相应 API 。下面的例子演示了从给定的时间字符串解析成 Unix 时间戳的过程[^3]: ```cpp #include <iostream> #include <ctime> #include <cstring> int main() { const char* datetimeStr = "2021-06-24 14:05:23"; struct tm tstruct {}; memset(&tstruct, 0, sizeof(tstruct)); strptime(datetimeStr, "%Y-%m-%d %H:%M:%S", &tstruct); time_t timestamp = mktime(&tstruct); std::cout << "Timestamp is : " << timestamp << std::endl; } ``` 这段源码解释了如何把 ISO 8601 形式的日期时间字符串转换成为秒级 UNIX 时间戳。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值