c語言時間格式
1. 用c語言實現:首先獲取系統時鍾,然後時鍾數據格式為:年月日時分秒(YYYYMMDDHHMMSS)
#include <stdio.h>
#include <time.h>
int main()
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
int year,month,day,hour,min,sec;
year = 1900+timeinfo->tm_year;
month = 1+timeinfo->tm_mon;
day = timeinfo->tm_mday;
hour = timeinfo->tm_hour;
min = timeinfo->tm_min;
sec = timeinfo->tm_sec;
printf ( "當前時間:%4d-%02d-%02d %02d:%02d:%02d
",year, month,day,hour,min,sec);
printf ( "你需要的格式:%4d%02d%02d%02d%02d%02d
",year, month,day,hour,min,sec);
char hyy[2],lyy[2],MM[2],dd[2],hh[2],mm[2],ss[2];
sprintf(hyy,"%02X",year/100);
sprintf(lyy,"%02X",year%100);
sprintf(MM,"%02X",month);
sprintf(dd,"%02X",day);
sprintf(hh,"%02X",hour);
sprintf(mm,"%02X",min);
sprintf(ss,"%02X",sec);
printf("轉化為16進制:%02s%02s%02s%02s%02s%02s%02s
",hyy,lyy,MM,dd,hh,mm,ss);
//exit(0);
return 0;
}
說明:我用VC6.0現寫的,運行結果截圖如下:
2. c語言,如何進行日期格式轉換
time.h 有函數 strftime 輸出各種格式,但沒有 你的 11th 13rd 格式。
簡單辦法是用查表法
#include "stdio.h"
#include "stdlib.h"
void main()
{
char dmy[20]="13/12/2010";
int i,j;
int a,b,c;
char d[32][5]={"0","1st","2nd","3rd","4th","5th","6th","7th","8th","9th","10th",
"11th","12th","13rd","14th","15th","16th","17th","18th",
"19th",.....,"31st"}; // 請自己補全
char m[13][4]={" ","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
j = strlen(dmy);
printf("j=%d\n",j);
for (i=0;i<j ;i++) if ( dmy[i] =='/') dmy[i]=' ';
sscanf(dmy,"%d %d %d",&a,&b,&c);
printf("%s %s %d",d[a],m[b],c); // 列印出你要的 13rd Dec 2010
}
3. C語言格式化輸入輸出(關於日期)
寫下這篇文章,主要是記載自己的學習心得,同時也分享給所有正在學習c語言的小白們。
關於日期的輸出呢,看起來是挺簡單的,但當題目要求輸入比如:2019--10--01或者2019--09--10,正在學習c語言的人(包括我)就會卡在這,如何將1~9的「0」一起輸出呢?
其實很簡單,這里巧用「0」,既然題目說到0n(n代表1~9月或者日期),那我們肯定要用到「0」呀,那這個「0」該放哪呢,又是個問題。
但不用慌,想想我們之前的輸出,就應該知道這個「0」應該這樣 printf("%02d",&n);, 而那個2怎麼來的呢,就是代表整個寬度為2(因為月份,日期最大占兩位數),即%04d表示在輸出一個小於4位的數值時,將在前面補0使其總寬度為4位。
因此,在日期時應該: printf("%d %02d %02d",year,month,day);
下面直接放題:
按 yyyy/mm/dd 形式從鍵盤輸入一個日期,按yyyy--mm--dd 形式輸出該日期,其中 yyyy, mm, dd 分別表示年、月、日。
輸入:
2019/10/01
輸出:
2019--10--01
#include<stdio.h>
int main()
{
int year,month,day;
scanf("%d/%d/%d",&year,&month,&day);
printf("%d--%02d--%02d",year,month,day);
}
沒錯這就可以了,這篇呢只是為了鞏固做題的思路,以及給所有的小白看的。當然,還需要大佬們的指導。
4. C語言中 有沒有函數可以將字元串直接轉為時間格式的
由於實際生活中,字元串形式的時間有可能有多種形式,比如月日年,或年月日,中間的分隔符也可能有所不同。所以C語言並沒有提供此類的轉換函數。
如果有需求,那麼在確定字元串的組織格式前提下,可以自行書寫一個轉換函數。
有兩種思路:
1 傳入字元串,逐位解析每個字元,智能檢查出數字之間的分隔符。然後根據分隔符,取出各個位上的數值,如年月日時分秒等。最終賦值到時間結構的對應成員變數上。
2 使用sscanf,根據約定好的格式,構建對應的格式字元串,將數值提取到對應的變數中。
對比二者,第一種方式代碼量更大,但可以兼容更復雜的輸入方式,使得輸入更靈活,程序健壯性更好。第二種方式適用於嚴格約定輸入格式的情況,以最少的代碼量實現效果。
5. C語言時間函數time_t
1、time_t // 時間類型(time.h 定義)
struct tm { // 時間結構,time.h 定義如下:
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
}
time ( &rawtime ); // 獲取時間,以秒計,從1970年1月一日起算,存於rawtime
localtime ( &rawtime ); //轉為當地時間,tm 時間結構
asctime() // 轉為標准ASCII時間格式:
//就是直接列印tm,tm_year 從1900年計算,所以要加1900,月tm_mon,從0計算,所以要加1
2、time函數使用示例
#include<stdio.h>
#include<time.h>
intmain()
{
time_trawtime;
structtm*timeinfo;
time(&rawtime);
timeinfo=localtime(&rawtime);
printf("Thecurrentdate/timeis:%s",asctime(timeinfo));
return0;
}
6. C語言中的時間
以前實際上用過,很想對C語言中的時間函數了解多一點,趁著這個寒假,查了些資料,大概把我現在能用到的關於時間的操作在此記錄下來。通過幾個函數來熟悉C語言中對時間的操作。(註:以下程序均在VS2010上編譯通過。)①time()函數。可以通過time()函數來獲得日歷時間。其原型為: time_t time(time_t *timer);一般參數為空,返回值類型time_t是一個長整型數,函數將返回現在的日歷時間,即從一個時間點(所有不同版本的Visual C++都是從1970年1月1日0時0分0秒)到現在的經過的秒數。例子程序:#include<stdio.h>#include<time.h>void main(){ time_t lt; lt=time(NULL); printf("1970年1月1日0時0分0秒到現在經歷了%ld秒%A",lt);}運行結果(結果與程序運行的時間有關,貼出我此時運行出的結果):1970年1月1日0時0分0秒到現在經歷了1326975564秒請按任意鍵繼續. . .②clock()函數。C語言中的計時函數。函數原型為: clock_t clock(void);clock()函數返回從「開啟這個程序進程\」到「程序中調用clock()函數」時之間的CPU時鍾計時單元數。返回值類型clock_t也是一個長整型數。在time.h頭文件中定義了一個符號常量CLOCKS_PER_SEC,表示一秒鍾會有多少個計時單元。所以通過簡單的數學知識,可以知道在程序中用clock()/CLOCKS_PER_SEC來表示程序從開始到調用clock()函數時用了多少秒。例子程序:#include<stdio.h>#include<time.h>void main(){ clock_t lt; for(int i=0;i<1000000000;i++); lt=clock(); printf("循環執行1000000000個空操作需要%f秒%A",(double)lt/CLOCKS_PER_SEC);}運行結果(在不同的機器上運行的結果可能不一樣,下面是在我自己的筆記本上運行的結果):循環執行1000000000個空操作需要3.484000秒請按任意鍵繼續. . .③使用C庫函數來顯示日期和時間。首先要介紹一下C語言中的一個日期的結構體類型,tm類型。其在time.h中的定義如下:#ifndef _TM_DEFINEDstruct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; };#define _TM_DEFINED#endif然後可以介紹有關的函數了。time.h提供了兩種不同的函數將日歷時間(一個長整型數)轉換成我們平時看到的把年月日時分秒分開的時間格式: struct tm *gmtime(const time_t *timer); struct tm *localtime(const time_t *timer);其中gmtime()函數是將日歷時間轉換為世界標准時間(即格林尼治時間),並返回一個tm結構體來保存這個時間,而localtime()函數是將日歷時間轉換為本地時間(在中國地區獲得的本地時間會比世界標准時間晚8個小時)。例子程序:#include<stdio.h>#include<time.h>void main(){ struct tm *local; time_t t; t=time(NULL); local=localtime(&t); printf("現在北京時間是%d點%A",local->tm_hour); local=gmtime(&t); printf("世界標准時間是%d點%A",local->tm_hour);}運行結果(運行結果與運行的時間有關,我是在早上9點多鍾運行這個程序的):現在北京時間是9點世界標准時間是1點請按任意鍵繼續. . .這樣子我們就可以完全才輸出此刻的年月日時分秒了,當然需要逐個來輸出。其實C庫函數還提供了一個很有用的以固定的時間格式來輸出年月日時分秒的函數。這兩個函數原型如下: char *asctime(const struct tm *timeptr); char *ctime(const time_t *timer);asctime()函數是通過tm結構來生成具有固定格式的保存時間信息的字元串,而ctime()是通過日歷時間來生成時間字元串。這樣下面的例子程序就容易理解了:#include<stdio.h>#include<time.h>void main(){ struct tm *local; time_t t; t=time(NULL); local=localtime(&t); printf(asctime(local)); local=gmtime(&t); printf(asctime(local)); printf(ctime(&t));}運行結果(我是在早上9點多運行這個程序的):Fri Jan 20 09:55:56 2012Fri Jan 20 01:55:56 2012Fri Jan 20 09:55:56 2012請按任意鍵繼續. . .C語言還可以以我們規定的各種形式來規定輸出時間的格式。要用到時可以查閱相關的資料,限於篇幅,就介紹到這里。④這里介紹計算持續的時間長度的函數。之前已經介紹了使用clock()函數的例子,它可以精確到毫秒級。其實我們也可以使用difftime()函數,但它只精確到秒。該函數的定義如下: double difftime(time_t time1,time_t time0);例子程序:#include<stdio.h>#include<time.h>#include<stdlib.h>void main(){ time_t start,end; start=time(NULL); for(int i=0;i<1000000000;i++); end=time(NULL); printf("這個循-環用了%f秒%A",difftime(end,start));}運行結果:這個循環用了3.000000秒請按任意鍵繼續. . .⑤最後介紹mktime()函數。原型如下: time_t mktime(struct tm *timer);可以使用函數將用tm結構表示的時間轉換為日歷時間。其返回值就是轉換後的日歷時間。這樣我們就可以先制定一個分解時間,然後對這個時間進行操作。下面的例子用來計算2012年1月20日是星期幾:#include<time.h>#include<stdio.h>#include<stdlib.h>int main(void){ struct tm t; time_t t_of_day; t.tm_year=2012-1900; t.tm_mon=0; t.tm_mday=20; t.tm_hour=0; t.tm_min=12; t.tm_sec=1; t.tm_isdst=1; t_of_day=mktime(&t); printf(ctime(&t_of_day)); return 0;}運行結果:Fri Jan 20 00:12:01 2012請按任意鍵繼續. . .