VC++中CTime類format的使用
阿新 • • 發佈:2019-02-01
使用CTime類可以很方便地取得當前系統時間並轉換為各種格式
The format argument consists of one or more codes; as in printf, the formatting codes are preceded by a percent sign (%). Characters that do not begin with % are copied unchanged to strDest. The LC_TIME category of the current locale affects the output formatting of strftime
- %a
- Abbreviated weekday name
- %A
- Full weekday name
- %b
- Abbreviated month name
- %B
- Full month name
- %c
- Date and time representation appropriate for locale
- %d
- Day of month as decimal number (01 – 31)
- %H
- Hour in 24-hour format (00 – 23)
- %I
- Hour in 12-hour format (01 – 12)
- %j
- Day of year as decimal number (001 – 366)
- %m
- Month as decimal number (01 – 12)
- %M
- Minute as decimal number (00 – 59)
- %p
- Current locale's A.M./P.M. indicator for 12-hour clock
- %S
- Second as decimal number (00 – 59)
- %U
- Week of year as decimal number, with Sunday as first day of week (00 – 53)
- %w
- Weekday as decimal number (0 – 6; Sunday is 0)
- %W
- Week of year as decimal number, with Monday as first day of week (00 – 53)
- %x
- Date representation for current locale
- %X
- Time representation for current locale
- %y
- Year without century, as decimal number (00 – 99)
- %Y
- Year with century, as decimal number
- %z, %Z
- Either the time-zone name or time zone abbreviation, depending on registry settings; no characters if time zone is unknown
- %%
- Percent sign
As in the printf function, the # flag may prefix any formatting code. In that case, the meaning of the format code is changed as follows.
Format code | Meaning |
---|---|
%#a, %#A, %#b, %#B, %#p, %#X, %#z, %#Z, %#% | # flag is ignored. |
%#c | Long date and time representation, appropriate for current locale. For example: "Tuesday, March 14, 1995, 12:41:29". |
%#x | Long date representation, appropriate to current locale. For example: "Tuesday, March 14, 1995". |
%#d, %#H, %#I, %#j, %#m, %#M, %#S, %#U, %#w, %#W, %#y, %#Y | Remove leading zeros (if any). |
Requirements
Routine | Required header | Compatibility |
---|---|---|
strftime | <time.h> | ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP |
wcsftime | <time.h> or <wchar.h> | ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP |
Example
// crt_times.c
/* This program demonstrates these time and date functions:
* _time64 _ftime64 _ctime64 asctime
* _localtime64 _gmtime64 _mktime64 _tzset
* _strtime _strdate strftime
*
* Also the global variable:
* _tzname
*/
#include <time.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/timeb.h>
#include <string.h>
int main()
{
char tmpbuf[128], ampm[] = "AM";
__time64_t ltime;
struct __timeb64 tstruct;
struct tm *today, *gmt, xmas = { 0, 0, 12, 25, 11, 93 };
/* Set time zone from TZ environment variable. If TZ is not set,
* the operating system is queried to obtain the default value
* for the variable.
*/
_tzset();
/* Display operating system-style date and time. */
_strtime( tmpbuf );
printf( "OS time:tttt%sn", tmpbuf );
_strdate( tmpbuf );
printf( "OS date:tttt%sn", tmpbuf );
/* Get UNIX-style time and display as number and string. */
_time64( <ime );
printf( "Time in seconds since UTC 1/1/70:t%ldn", ltime );
printf( "UNIX time and date:ttt%s", _ctime64( <ime ) );
/* Display UTC. */
gmt = _gmtime64( <ime );
printf( "Coordinated universal time:tt%s", asctime( gmt ) );
/* Convert to time structure and adjust for PM if necessary. */
today = _localtime64( <ime );
if( today->tm_hour >= 12 )
{
strcpy( ampm, "PM" );
today->tm_hour -= 12;
}
if( today->tm_hour == 0 ) /* Adjust if midnight hour. */
today->tm_hour = 12;
/* Note how pointer addition is used to skip the first 11
* characters and printf is used to trim off terminating
* characters.
*/
printf( "12-hour time:tttt%.8s %sn",
asctime( today ) + 11, ampm );
/* Print additional time information. */
_ftime64( &tstruct );
printf( "Plus milliseconds:ttt%un", tstruct.millitm );
printf( "Zone difference in hours from UTC:t%un",
tstruct.timezone/60 );
printf( "Time zone name:tttt%sn", _tzname[0] );
printf( "Daylight savings:ttt%sn",
tstruct.dstflag "YES" : "NO" );
/* Make time for noon on Christmas, 1993. */
if( _mktime64( &xmas ) != (__time64_t)-1 )
printf( "Christmastttt%sn", asctime( &xmas ) );
/* Use time structure to build a customized time string. */
today = _localtime64( <ime );
/* Use strftime to build a customized time string. */
strftime( tmpbuf, 128,
"Today is %A, day %d of %B in the year %Y.n", today );
printf( tmpbuf );
}
Sample Output
OS time: 14:15:49
OS date: 02/07/02
Time in seconds since UTC 1/1/70: 1013120149
UNIX time and date: Thu Feb 07 14:15:49 2002
Coordinated universal time: Thu Feb 07 22:15:49 2002
12-hour time: 02:15:49 PM
Plus milliseconds: 455
Zone difference in hours from UTC: 8
Time zone name: Pacific Standard Time
Daylight savings: NO
Christmas Sat Dec 25 12:00:00 1993
簡單點的如下:
CString msg1="aaaaaaaaaaa";
KillTimer(1);
CTime t = CTime::GetCurrentTime();
char szTime[8];
int nHour = t.GetHour();
int nMinute = t.GetMinute();
int nSecond = t.GetSecond();
wsprintf(szTime, "%02i:%02i:%02i", nHour, nMinute,nSecond);//分秒一般習慣用兩位表
m_edit1=szTime;
UpdateData (FALSE);
SetTimer(1, 1000,NULL);
msg1=t.Format("%d-%m-%y"); //可以看到format的功能
MessageBox(msg1);
format中引數的含義見上面的說明