#ctime #time.h #strftime
🔵زمان (time)
🔹تابع strftime
size_t strftime (char* ptr, size_t maxsize, const char* format,const struct tm* timeptr );
این تابع هم برای تبدیل کردن زمان به رشته با فرمتی خاص به کار می رود.
در این تابع دقیقا عین تابع ( )printf عمل می کنیم، یعنی برای هر کدام از زمان ها مثل ماه، سال یا روز باید یک کاراکتر خاص را بلد باشیم.
مثل تابع ( )printfکه برای نشان دادن هرکدام از انواع داده ها باید از یک کاراکتر فرمت خاصی راحفظ باشیم.
🔹پارامتر ها :
🔻مفهوم ptr* :
این یک اشاره گر به ابتدا آرایه ای است که می خواهیم زمان را داخلش بریزیم.
🔻مفهوم Maxsize :
همان طول آرایه است که وارد تابع می شود تا تابع بداند چه مقدار حافظه برای نوشتن دارد.
🔻مفهوم format* :
همانطور که می دانید یک رشته حاوی کاراکترهایی است که به طور منظم کنار هم قرار گرفته تا معنی دار باشند، به همین نظم و ترتیب خاص فرمت رشته می گوییم.
حال می توانیم به طرق مختلف فرمت رشته را عوض کنیم مثلا یک رشته را به عدد تبدیل کنیم یا برعکس حالا گاهی لازم است یک زمان را به رشته تبدیل کنیم باید به strftime بگوییم که این کدام نوعِ زمان است مثل تابع ( )printf شما لیست کاراکتر های فرمت را داخل( )printf می دانید ولی این کاراکتر ها در strftime متفاوت است.
این میشود :
specifier Replaced by Example
🔹%a
Abbreviated weekday name *Thu
🔹%A
Full weekday name *Thursday
🔹%b
Abbreviated month name *Aug
🔹%B
Full month name
*August
🔹%c
Date and time
representation
*Thu Aug 23 14:55:02 2001
🔹%C
Year divided by 100 and truncated to integer (00-99) 20
🔹%d
Day of the month, zero-padded (01-31) 23
🔹%D
Short MM/DD/YY date, equivalent to %m/%d/%y 08/23/01
🔹%e
Day of the month, space-
padded ( 1-31) 23
🔹%F
Short YYYY-MM-DD date, equivalent to %Y-%m-%d 2001-08-23
🔹%g
Week-based year, last two digits (00-99) 01
🔹%G
Week-based year 2001
🔹%h
Abbreviated month name * (same as %b) Aug
🔹%H
Hour in 24h format (00-23)
14
🔹%I
Hour in 12h format (01-12) 02
🔹%j
Day of the year (001-366) 235
🔹%m
Month as a decimal number (01-12) 08
🔹%M
Minute (00-59) 55
🔹%n
New-line character ('\n')
🔹%p
AM or PM designation PM
🔹%r
12-hour clock time * 02:55:02 pm
🔹%R
24-hour HH:MM time, equivalent to %H:%M 14:55
🔹%S
Second (00-61) 02
🔹%t
Horizontal-tab character ('\t')
🔹%T
ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S 14:55:02
🔹%u
ISO 8601 weekday as number with Monday as 1 (1-7) 4
🔹%U
Week number with the first Sunday as the first day of week one (00-53) 33
🔹%V
ISO 8601 week number (00-53) 34
🔹%w
Weekday as a decimal number with Sunday as 0 (0-6) 4
🔹%W
Week number with the first Monday as the first day of week one (00-53) 34
🔹%x
Date representation * 08/23/01
🔹%X
Time representation * 14:55:02
🔹%y
Year, last two digits (00-99) 01
🔹%Y
Year 2001
🔹%z
ISO 8601 offset from UTC in timezone (1 minute=1, 1 hour=100)
If timezone cannot be determined, no characters ت +100
🔹%Z
Timezone name or abbreviation *
If timezone cannot be determined, no characters CDT
%% A % sign %
🔻مفهوم timeptr* :
همان زمانی است که می خواهیم فرمت آن را عوض کنیم.
🔹مقادیر بازگشتی :
اگر برای این تابع مشکلی پیش نیاید (که معمولا مشکل کم بودن طول آرایه یا نامفهوم بودن محتوای format می شود) و به اندازه ای فضا داشته باشد که بتواند آخر آرایه را با کاراکتر null پر کند، تعداد کاراکتر های نوشته شده در ptr را برمیگرداند و اگر تابع درکار خود شکست بخورد مقدار صفر را برمیگرداند.
#include /* puts */
#include /* time_t, struct tm, time, localtime, strftime */
int main ( )
{
time_t rawtime;
struct tm *timeinfo;
char buffer[80];
time (&rawtime);
timeinfo=localtime(&rawtime);
strftime (buffer,80,"Now it's %I:%M%p.",timeinfo);
puts (buffer);
return 0;
}
output:
Now it's 03:21PM.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵زمان (time)
🔹تابع strftime
size_t strftime (char* ptr, size_t maxsize, const char* format,const struct tm* timeptr );
این تابع هم برای تبدیل کردن زمان به رشته با فرمتی خاص به کار می رود.
در این تابع دقیقا عین تابع ( )printf عمل می کنیم، یعنی برای هر کدام از زمان ها مثل ماه، سال یا روز باید یک کاراکتر خاص را بلد باشیم.
مثل تابع ( )printfکه برای نشان دادن هرکدام از انواع داده ها باید از یک کاراکتر فرمت خاصی راحفظ باشیم.
🔹پارامتر ها :
🔻مفهوم ptr* :
این یک اشاره گر به ابتدا آرایه ای است که می خواهیم زمان را داخلش بریزیم.
🔻مفهوم Maxsize :
همان طول آرایه است که وارد تابع می شود تا تابع بداند چه مقدار حافظه برای نوشتن دارد.
🔻مفهوم format* :
همانطور که می دانید یک رشته حاوی کاراکترهایی است که به طور منظم کنار هم قرار گرفته تا معنی دار باشند، به همین نظم و ترتیب خاص فرمت رشته می گوییم.
حال می توانیم به طرق مختلف فرمت رشته را عوض کنیم مثلا یک رشته را به عدد تبدیل کنیم یا برعکس حالا گاهی لازم است یک زمان را به رشته تبدیل کنیم باید به strftime بگوییم که این کدام نوعِ زمان است مثل تابع ( )printf شما لیست کاراکتر های فرمت را داخل( )printf می دانید ولی این کاراکتر ها در strftime متفاوت است.
این میشود :
specifier Replaced by Example
🔹%a
Abbreviated weekday name *Thu
🔹%A
Full weekday name *Thursday
🔹%b
Abbreviated month name *Aug
🔹%B
Full month name
*August
🔹%c
Date and time
representation
*Thu Aug 23 14:55:02 2001
🔹%C
Year divided by 100 and truncated to integer (00-99) 20
🔹%d
Day of the month, zero-padded (01-31) 23
🔹%D
Short MM/DD/YY date, equivalent to %m/%d/%y 08/23/01
🔹%e
Day of the month, space-
padded ( 1-31) 23
🔹%F
Short YYYY-MM-DD date, equivalent to %Y-%m-%d 2001-08-23
🔹%g
Week-based year, last two digits (00-99) 01
🔹%G
Week-based year 2001
🔹%h
Abbreviated month name * (same as %b) Aug
🔹%H
Hour in 24h format (00-23)
14
🔹%I
Hour in 12h format (01-12) 02
🔹%j
Day of the year (001-366) 235
🔹%m
Month as a decimal number (01-12) 08
🔹%M
Minute (00-59) 55
🔹%n
New-line character ('\n')
🔹%p
AM or PM designation PM
🔹%r
12-hour clock time * 02:55:02 pm
🔹%R
24-hour HH:MM time, equivalent to %H:%M 14:55
🔹%S
Second (00-61) 02
🔹%t
Horizontal-tab character ('\t')
🔹%T
ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S 14:55:02
🔹%u
ISO 8601 weekday as number with Monday as 1 (1-7) 4
🔹%U
Week number with the first Sunday as the first day of week one (00-53) 33
🔹%V
ISO 8601 week number (00-53) 34
🔹%w
Weekday as a decimal number with Sunday as 0 (0-6) 4
🔹%W
Week number with the first Monday as the first day of week one (00-53) 34
🔹%x
Date representation * 08/23/01
🔹%X
Time representation * 14:55:02
🔹%y
Year, last two digits (00-99) 01
🔹%Y
Year 2001
🔹%z
ISO 8601 offset from UTC in timezone (1 minute=1, 1 hour=100)
If timezone cannot be determined, no characters ت +100
🔹%Z
Timezone name or abbreviation *
If timezone cannot be determined, no characters CDT
%% A % sign %
🔻مفهوم timeptr* :
همان زمانی است که می خواهیم فرمت آن را عوض کنیم.
🔹مقادیر بازگشتی :
اگر برای این تابع مشکلی پیش نیاید (که معمولا مشکل کم بودن طول آرایه یا نامفهوم بودن محتوای format می شود) و به اندازه ای فضا داشته باشد که بتواند آخر آرایه را با کاراکتر null پر کند، تعداد کاراکتر های نوشته شده در ptr را برمیگرداند و اگر تابع درکار خود شکست بخورد مقدار صفر را برمیگرداند.
#include /* puts */
#include /* time_t, struct tm, time, localtime, strftime */
int main ( )
{
time_t rawtime;
struct tm *timeinfo;
char buffer[80];
time (&rawtime);
timeinfo=localtime(&rawtime);
strftime (buffer,80,"Now it's %I:%M%p.",timeinfo);
puts (buffer);
return 0;
}
output:
Now it's 03:21PM.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp