Unix timestamp 格式化显示问题

时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数。我们有时候需要将它格式化显示,比如这个Unix timestamp在当前看来,是xxxx年xx月等。我一般使用strftime来格式化显示我想要样式。下面看一下这个函数的原型

size_t strftime (char* ptr, size_t maxsize, const char* format,  const struct tm* timeptr );

从最后一个参数看出,这个函数的输入只能是struct tm 结构的数据,所以我们需要将Unix timestamp转化成struct tm结构的时间。而转化的时候,我们希望表示的是当前时区的时间,所以我一般是localtime这个函数,我们看一下localtime这个函数的原型

struct tm * localtime (const time_t * timer)

很容易看出,localtime这个函数可以将Unix timestamp转化成struct tm结构的时间。所以直接上代码:

#include <iostream>
#include <cstdio>
#include <ctime>
int main(int argc ,char** argv)
{
    time_t clock;
    struct tm *tm;
    time ( &clock );
    tm = localtime ( &clock );
    char buff[80]={0};
    strftime(buff,sizeof buff,"%m月%e日,%H时%M分",tm);
    std::cout<<"时间:"<<buff<<std::endl;
    return 0;
}

其中strftime可以接受的格式化参数,这里 点击打开链接有一个详细的说明。我在这里转帖一下:


specifierReplaced byExample
%aAbbreviated weekday name *Thu
%AFull weekday name *Thursday
%bAbbreviated month name *Aug
%BFull month name *August
%cDate and time representation *Thu Aug 23 14:55:02 2001
%CYear divided by 100 and truncated to integer (00-99)20
%dDay of the month, zero-padded (01-31)23
%DShort MM/DD/YY date, equivalent to %m/%d/%y08/23/01
%eDay of the month, space-padded ( 1-31)23
%FShort YYYY-MM-DD date, equivalent to %Y-%m-%d2001-08-23
%gWeek-based year, last two digits (00-99)01
%GWeek-based year2001
%hAbbreviated month name * (same as %b)Aug
%HHour in 24h format (00-23)14
%IHour in 12h format (01-12)02
%jDay of the year (001-366)235
%mMonth as a decimal number (01-12)08
%MMinute (00-59)55
%nNew-line character ('\n')
%pAM or PM designationPM
%r12-hour clock time *02:55:02 pm
%R24-hour HH:MM time, equivalent to %H:%M14:55
%SSecond (00-61)02
%tHorizontal-tab character ('\t')
%TISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S14:55:02
%uISO 8601 weekday as number with Monday as 1 (1-7)4
%UWeek number with the first Sunday as the first day of week one (00-53)33
%VISO 8601 week number (00-53)34
%wWeekday as a decimal number with Sunday as 0 (0-6)4
%WWeek number with the first Monday as the first day of week one (00-53)34
%xDate representation *08/23/01
%XTime representation *14:55:02
%yYear, last two digits (00-99)01
%YYear2001
%zISO 8601 offset from UTC in timezone (1 minute=1, 1 hour=100)
If timezone cannot be termined, no characters
+100
%ZTimezone name or abbreviation *
If timezone cannot be termined, no characters
CDT
%%A % sign%
* The specifiers marked with an asterisk (*) are locale-dependent.
Note: Yellow rows indicate specifiers and sub-specifiers introduced by C99. Since C99, two locale-specific modifiers can also be inserted between the percentage sign ( %) and the specifier proper to request an alternative format, where applicable:
ModifierMeaningApplies to
EUses the locale's alternative representation%Ec %EC %Ex %EX %Ey %EY
OUses the locale's alternative numeric symbols%Od %Oe %OH %OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值