c++时间格式转换--strftime和strptime使用

本文详细介绍了Linux环境下时间日期格式化函数strftime和strptime的使用方法,包括函数原型、参数说明、具体控制转换符及示例程序,帮助开发者熟练掌握时间日期的格式化操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

strftime和strptime使用

openclassroom整理自《linux程序设计》
这两个函数都是时间日期的格式控制函数,在功能上看起来正好相反。strftime将一个tm结构格式化为一个字符串,strptime则是将一个字符串格式化为一个tm结构。

  • strftime

函数原型:size_t strftime(char *s,size_t maxsize,char *format,const struct tm *timeptr)
strftime函数对timeptr指向的tm结构所代表的时间和日期进行格式编排,其结果放在字符串s中。该字符串的长度被设置为(最少)maxsize个字符。格式字符串format用来对写入字符串的字符进行控制,它包含着将被传送到字符串里去的普通字符以及编排时间和日期格式的转换控制符。转换控制符见下表

转换控制符说明
%a星期几的简写形式
%A星期几的全称
%b月份的简写形式
%B月份的全称
%c日期和时间
%d月份中的日期,0-31
%H小时,00-23
%I12进制小时钟点,01-12
%j年份中的日期,001-366
%m年份中的月份,01-12
%M分,00-59
%p上午或下午
%S秒,00-60
%u星期几,1-7
%w星期几,0-6
%x当地格式的日期
%X当地格式的时间
%y年份中的最后两位数,00-99
%Y
%Z地理时区名称

具体的控制转换符说明可以查看man.

  • strptime

函数原型: char *strptime(const char *buf,const char *format,struct tm *timeptr)

format字符串的构建方式和strftime的format字符串完全一样。strptime返回一个指针,指向转换过程处理的最后一个字符后面的那个字符。

看下边一个程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  1. <span>#include <stdio.h></span>  
  2. <span>#include <stdlib.h></span>  
  3. <span>#include <string.h></span>  
  4. <span>#include <time.h></span>  
  5.    
  6. <span>int</span> main<span>(</span><span>)</span><span>{</span>  
  7.   <span>struct</span> tm <span>*</span>tm_ptr<span>,</span>timestruct<span>;</span>  
  8.   time_t the_time<span>;</span>  
  9.   <span>char</span> <span>*</span>buf<span>[</span><span>256</span><span>]</span><span>;</span>  
  10.    
  11.   <span>(</span><span>void</span><span>)</span> time<span>(</span><span>&</span>the_time<span>)</span><span>;</span>  
  12.   tm_ptr<span>=</span>localtime<span>(</span><span>&</span>the_time<span>)</span><span>;</span>  
  13.   strftime<span>(</span>buf<span>,</span><span>256</span><span>,</span><span>"%A %d %B,%I:%S %p"</span><span>,</span>tm_ptr<span>)</span><span>;</span>  
  14.   <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span>printf</span></a><span>(</span><span>"strftime gives: %s<span>/n</span>"</span><span>,</span>buf<span>)</span><span>;</span>  
  15.    
  16.   strcpy<span>(</span>buf<span>,</span><span>"Sat 26 July 2003,17:53 will do fine"</span><span>)</span><span>;</span>  
  17.    
  18.   <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span>printf</span></a><span>(</span><span>"calling strptime with: %s<span>/n</span>"</span><span>,</span>buf<span>)</span><span>;</span>  
  19.   tm_ptr<span>+&</span>timestruct<span>;</span>  
  20.    
  21.   result<span>=</span>strptime<span>(</span>buf<span>,</span><span>"%a %d %b %Y,%R"</span><span>,</span>tm_ptr<span>)</span><span>;</span>  
  22.   <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span>printf</span></a><span>(</span><span>"strptime consumed up to: %s<span>/n</span>"</span><span>,</span>result<span>)</span><span>;</span>  
  23.    
  24.   <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span>printf</span></a><span>(</span><span>"strptime gives:<span>/n</span>"</span><span>)</span><span>;</span>  
  25.   <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span>printf</span></a><span>(</span><span>"date: %02d/%02d/%02d<span>/n</span>"</span><span>,</span>tm_ptr<span>-></span>tm_year<span>%</span><span>100</span><span>,</span>tm_ptr<span>-></span>tm_mon<span>+</span><span>1</span><span>,</span>tm_ptr<span>-></span>tm_mday<span>)</span><span>;</span>  
  26.   <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span>printf</span></a><span>(</span><span>"time: %02d:%02d<span>/n</span>"</span><span>,</span>tm_ptr<span>-></span>tm_hour<span>,</span>tm_ptr<span>-></span>tm_min<span>)</span><span>;</span>  
  27.   exit<span>(</span><span>0</span><span>)</span><span>;</span>  
  28. <span>}</span>  

运行后输出
strftime gives:Sunday 06 June, 11:55 AM
calling strptime with:Sat 26 July 2003,17:53 will do fine
strptime consumed up to:will do fine
strptime gives:
date: 03/07/26
time: 17:53


转自http://blog.youkuaiyun.com/wisage/article/details/6269218

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值