linux系統時間程式設計(6) 日曆時間tm轉字串strftime函式
<time.h> | |
---|---|
size_t strftime( char * str, size_t count, const char * format, const struct tm * time ); | (until C99) |
size_t strftime( char *restrict str, size_t count, const char *restrict format, const struct tm *restrict time ); | (since C99) |
count指出了寫到str的最大長度,不包含\0,所以使用者提供的str的長度必須大於等於count+1。
format用於指定輸出的格式,這個格式非常豐富,見下表:
%+下面的字母代表一段字串。
Conversion specifier | Explanation | Used fields |
---|---|---|
% | writes literal % . The full conversion specification must be %% . | |
n (C99) | writes newline character | |
t (C99) | writes horizontal tab character | |
Year | ||
Y | writes year as a decimal number, e.g. 2017 | **tm_year** |
EY (C99) | writes year in the alternative representation, e.g.平成23年 (year Heisei 23) instead of 2011年 (year 2011) in ja_JP locale | **tm_year** |
y | writes last 2 digits of year as a decimal number (range [00,99] ) | **tm_year** |
Oy (C99) | writes last 2 digits of year using the alternative numeric system, e.g. 十一 instead of 11 in ja_JP locale | **tm_year** |
Ey (C99) | writes year as offset from locale’s alternative calendar period %EC (locale-dependent) | **tm_year** |
C (C99) | writes first 2 digits of year as a decimal number (range [00,99] ) | **tm_year** |
EC (C99) | writes name of the base year (period) in the locale’s alternative representation, e.g. 平成 (Heisei era) in ja_JP | **tm_year** |
G (C99) | writes ISO 8601 week-based year, i.e. the year that contains the specified week.In IS0 8601 weeks begin with Monday and the first week of the year must satisfy the following requirements:Includes January 4Includes first Thursday of the year | **tm_year** , **tm_wday** , **tm_yday** |
g (C99) | writes last 2 digits of ISO 8601 week-based year, i.e. the year that contains the specified week (range [00,99] ).In IS0 8601 weeks begin with Monday and the first week of the year must satisfy the following requirements:Includes January 4Includes first Thursday of the year | **tm_year** , **tm_wday** , **tm_yday** |
Month | ||
b | writes abbreviated month name, e.g. Oct (locale dependent) | **tm_mon** |
Ob (C23) | writes abbreviated month name in the locale’s alternative representation | **tm_mon** |
h (C99) | synonym of b | **tm_mon** |
B | writes full month name, e.g. October (locale dependent) | **tm_mon** |
OB (C23) | writes appropriate full month name in the locale’s alternative representation | **tm_mon** |
m | writes month as a decimal number (range [01,12] ) | **tm_mon** |
Om (C99) | writes month using the alternative numeric system, e.g. 十二 instead of 12 in ja_JP locale | **tm_mon** |
Week | ||
U | writes week of the year as a decimal number (Sunday is the first day of the week) (range [00,53] ) | **tm_year** , **tm_wday** , **tm_yday** |
OU (C99) | writes week of the year, as by %U , using the alternative numeric system, e.g. 五十二 instead of 52 in ja_JP locale | **tm_year** , **tm_wday** , **tm_yday** |
W | writes week of the year as a decimal number (Monday is the first day of the week) (range [00,53] ) | **tm_year** , **tm_wday** , **tm_yday** |
OW (C99) | writes week of the year, as by %W , using the alternative numeric system, e.g. 五十二 instead of 52 in ja_JP locale | **tm_year** , **tm_wday** , **tm_yday** |
V (C99) | writes ISO 8601 week of the year (range [01,53] ).In IS0 8601 weeks begin with Monday and the first week of the year must satisfy the following requirements:Includes January 4Includes first Thursday of the year | **tm_year** , **tm_wday** , **tm_yday** |
OV (C99) | writes week of the year, as by %V , using the alternative numeric system, e.g. 五十二 instead of 52 in ja_JP locale | **tm_year** , **tm_wday** , **tm_yday** |
Day of the year/month | ||
j | writes day of the year as a decimal number (range [001,366] ) | **tm_yday** |
d | writes day of the month as a decimal number (range [01,31] ) | **tm_mday** |
Od (C99) | writes zero-based day of the month using the alternative numeric system, e.g 二十七 instead of 27 in ja_JP localeSingle character is preceded by a space. | **tm_mday** |
e (C99) | writes day of the month as a decimal number (range [1,31] ).Single digit is preceded by a space. | **tm_mday** |
Oe (C99) | writes one-based day of the month using the alternative numeric system, e.g. 二十七 instead of 27 in ja_JP localeSingle character is preceded by a space. | **tm_mday** |
Day of the week | ||
a | writes abbreviated weekday name, e.g. Fri (locale dependent) | **tm_wday** |
A | writes full weekday name, e.g. Friday (locale dependent) | **tm_wday** |
w | writes weekday as a decimal number, where Sunday is 0 (range [0-6] ) | **tm_wday** |
Ow (C99) | writes weekday, where Sunday is 0 , using the alternative numeric system, e.g. 二 instead of 2 in ja_JP locale | **tm_wday** |
u (C99) | writes weekday as a decimal number, where Monday is 1 (ISO 8601 format) (range [1-7] ) | **tm_wday** |
Ou (C99) | writes weekday, where Monday is 1 , using the alternative numeric system, e.g. 二 instead of 2 in ja_JP locale | **tm_wday** |
Hour, minute, second | ||
H | writes hour as a decimal number, 24 hour clock (range [00-23] ) | **tm_hour** |
OH (C99) | writes hour from 24-hour clock using the alternative numeric system, e.g. 十八 instead of 18 in ja_JP locale | **tm_hour** |
I | writes hour as a decimal number, 12 hour clock (range [01,12] ) | **tm_hour** |
OI (C99) | writes hour from 12-hour clock using the alternative numeric system, e.g. 六 instead of 06 in ja_JP locale | **tm_hour** |
M | writes minute as a decimal number (range [00,59] ) | **tm_min** |
OM (C99) | writes minute using the alternative numeric system, e.g. 二十五 instead of 25 in ja_JP locale | **tm_min** |
S | writes second as a decimal number (range [00,60] ) | **tm_sec** |
OS (C99) | writes second using the alternative numeric system, e.g. 二十四 instead of 24 in ja_JP locale | **tm_sec** |
Other | ||
c | writes standard date and time string, e.g. Sun Oct 17 04:41:13 2010 (locale dependent) | all |
Ec (C99) | writes alternative date and time string, e.g. using 平成23年 (year Heisei 23) instead of 2011年 (year 2011) in ja_JP locale | all |
x | writes localized date representation (locale dependent) | all |
Ex (C99) | writes alternative date representation, e.g. using 平成23年 (year Heisei 23) instead of 2011年 (year 2011) in ja_JP locale | all |
X | writes localized time representation, e.g. 18:40:20 or 6:40:20 PM (locale dependent) | all |
EX (C99) | writes alternative time representation (locale dependent) | all |
D (C99) | equivalent to "%m/%d/%y" | **tm_mon** , **tm_mday** , **tm_year** |
F (C99) | equivalent to “%Y-%m-%d” (the ISO 8601 date format) | **tm_mon** , **tm_mday** , **tm_year** |
r (C99) | writes localized 12-hour clock time (locale dependent) | **tm_hour** , **tm_min** , **tm_sec** |
R (C99) | equivalent to "%H:%M" | **tm_hour** , **tm_min** |
T (C99) | equivalent to “%H:%M:%S” (the ISO 8601 time format) | **tm_hour** , **tm_min** , **tm_sec** |
p | writes localized a.m. or p.m. (locale dependent) | **tm_hour** |
z (C99) | writes offset from UTC in the ISO 8601 format (e.g. -0430 ), or no characters if the time zone information is not available | **tm_isdst** |
Z | writes locale-dependent time zone name or abbreviation, or no characters if the time zone information is not available | **tm_isdst** |
返回值
如果產生的 C 字串小於count個字元(不包括空結束字元),則會返回複製到 str 中的字元總數(不包括空結束字元),否則返回零。
例子
#include <stdio.h>
#include <time.h>
#include <locale.h>
int main(void)
{
char buff[70];
struct tm my_time = { .tm_year=112, // = year 2012
.tm_mon=9, // = 10th month
.tm_mday=9, // = 9th day
.tm_hour=8, // = 8 hours
.tm_min=10, // = 10 minutes
.tm_sec=20 // = 20 secs
};
if (strftime(buff, sizeof buff, "%A %c", &my_time)) {
puts(buff);
} else {
puts("strftime failed");
}
setlocale(LC_TIME, "el_GR.utf8");
if (strftime(buff, sizeof buff, "%A %c", &my_time)) {
puts(buff);
} else {
puts("strftime failed");
}
}
Possible output:
Sunday Sun Oct 9 08:10:20 2012
Κυριακή Κυρ 09 Οκτ 2012 08:10:20 πμ EST
#include <stdio.h>
#include <time.h>
int main ()
{
time_t rawtime;
struct tm *info;
char buffer[80];
time( &rawtime );
info = localtime( &rawtime );
strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", info);
printf("格式化的日期 & 時間 : |%s|\n", buffer );
return(0);
}
讓我們編譯並執行上面的程式,這將產生以下結果:
格式化的日期 & 時間 : |2018-09-19 08:59:07|
相關文章
- linux系統時間程式設計(8) UTC秒數轉本地字串時間Linux程式設計字串
- linux系統時間程式設計(9) 計算程式片段執行時間clock函式Linux程式設計函式
- strftime()函式,方便的時間操作函式
- Linux程式設計(獲取系統時間)Linux程式設計
- linux系統程式設計之檔案與IO(七):時間函式小結Linux程式設計函式
- Linux時間設定系統時間、硬體時間和時間服務Linux
- python獲取系統時間(時間函式詳解)Python函式
- C時間函式strftime、struct timespec 和 struct timeval函式Struct
- oracle時間間隔轉換函式Oracle函式
- linux系統時間設定Linux
- Linux設定系統時間Linux
- linux下的系統時間、硬體時間設定Linux
- 時間函式函式
- sql 獲取系統時間的函式。SQL函式
- Linux 系統時間和硬體時間Linux
- 時間日期字串轉換為時間物件字串物件
- mysql時間操作(時間差和時間戳和時間字串的互轉)MySql時間戳字串
- linux時間函式詳解Linux函式
- Linux下的時間函式Linux函式
- RedHat 6修改系統時間Redhat
- 常用函式--時間函式函式
- 轉換時間戳的函式時間戳函式
- 修改系統時間(轉)
- 如何將時間字串轉換為時間物件字串物件
- 物件~時間篇_日曆的實現物件
- 時間戳與時間字串的多時區轉換時間戳字串
- PHP 時間函式PHP函式
- 日期時間函式函式
- oracle時間函式Oracle函式
- MySQL時間函式MySql函式
- Sql時間函式SQL函式
- mysql 時間相關的函式 以及日期和字串互轉MySql函式字串
- Golang時間函式及測試函式執行時間案例Golang函式
- Linux系統時間與RTC設定Linux
- 修改linux系統時間Linux
- linux同步系統時間Linux
- linux修改系統時間Linux
- linux 修改系統時間Linux