① c語言日期格式轉換
1、c里沒有相應的庫,只能用asctime函數轉換成一種固定格式。如果要轉換,可以用sprintf把各種數據以「
1980-01-02
02:03:55
」
這種標准格式,格式到一個字元串中。
2、asctime函數:
原型:char*
asctime
(const
struct
tm
*
timeptr);
功能:把timeptr指向的tm結構體中儲存的時間轉換為字元串;
頭文件:time.h;
返回值:一個固定格式的字元串。字元串格式為:www
mmm
dd
hh:mm:ss
yyyy。其中www為星期,mmm為月份,dd為日,hh為時,mm為分,ss為秒,yyyy為年份。
3、常式:
#include
#include
int main(){
time_t rawtime;
struct tm * timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);//使用localtime函數把秒數時間rawtime轉換為本地時間以tm結構體保存,並把tm結構體地址儲存到timeinfo當中
printf("當前日期為: %s",asctime(timeinfo));//使用asctime函數把tm結構體中儲存的時間轉換為字元串,並輸出
return 0;
}
② C語言時間,怎麼把time_t類型的時間,轉化成年、月、日、時、分、秒呢
可以使用gmtime函數或localtime函數將time_t類型的時間日期轉換為struct tm類型(年、月、日、時、分、秒)。
使用time函數返回的是一個long值,該值對用戶的意義不大,一般不能根據其值確定具體的年、月、日等數據。gmtime函數可以方便的對time_t類型數據進行轉換,將其轉換為tm結構的數據方便數據閱讀。gmtime函數的原型如下:struct tm *gmtime(time_t *timep);localtime函數的原型如下:struct tm *localtime(time_t *timep);將參數timep所指的time_t類型信息轉換成實際所使用的時間日期表示方法,將結果返回到結構tm結構類型的變數。gmtime函數用來存放實際日期時間的結構變數是靜態分配的,每次調用gmtime函數都將重寫該結構變數。如果希望保存結構變數中的內容,必須將其復制到tm結構的另一個變數中。gmtime函數與localtime函數的區別:gmtime函數返回的時間日期未經時區轉換,是UTC時間(又稱為世界時間,即格林尼治時間)。localtime函數返回當前時區的時間。
轉換日期時間表示形式time_t類型轉換為struct tm類型示例:
#include <stdio.h>
#include <time.h>
int main()
{
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};/*指針字元數組*/ time_t t;
struct tm *p;
t=time(NULL);/*獲取從1970年1月1日零時到現在的秒數,保存到變數t中*/ p=gmtime(&t); /*變數t的值轉換為實際日期時間的表示格式*/
printf("%d年%02d月%02d日",(1900+p->tm_year), (1+p->tm_mon),p->tm_mday);
printf(" %s ", wday[p->tm_wday]);
printf("%02d:%02d:%02d\n", p->tm_hour, p->tm_min, p->tm_sec);
return 0;
}
注意:p=gmtime(&t);此行若改為p=localtime(&t);則返回當前時區的時間。
③ 怎麼用c語言轉換成年月日格式的求助啊。。。
#include<stdio.h>
intmain()
{
intyy,nn,dd,hh,mm,ss,len;
charout[2];
charinput[]="2015-06-2910:55:55pm";
len=sscanf(input,"%d-%d-%d%d:%d:%d%s",&yy,&nn,&dd,&hh,&mm,&ss,out);
printf("%d-%d-%d%d:%d:%d%slen-->%d",yy,nn,dd,hh,mm,ss,out,len);
return0;
}
④ 用c語言寫一個程序,輸入年月日,把日期自動加一天,然後輸入.
這是陽歷的常識:
陽歷(即公歷),是世界上多數國家通用的歷法,由"儒略歷"修訂而成。儒略歷
是公元前46年,古羅馬統帥儒略、愷撒決定採用的歷法。
陽歷,是以地球繞太陽運動作為根據的歷法。它以地球繞太陽一周(一回歸年)為
一年。一回歸年的長度是365.2422日,也就是365天5小時48分46秒,積累4年共有23小時
15分4秒,大約等於一天,所以每4年增加1天,加在2月的末尾,得366天,就是閏年。但
是4年加1天實際回歸年多了44分56秒,積滿128年左右就又多算了一天,也就是在400年中
約多算了3天。
陽歷閏年規定:公元年數可用4整除的,就算閏年;為了要在400年減去多算的3天,
並規定公元世紀的整數,即公元年數是100的整數時,須用400來整除的才算閏年,如1600
年、2000年、2200年、2400年就是閏年。這樣就巧妙地在400年中減去了3天,陽歷規定每
年都是12個月,月份的大小完全是人為的規定,現在規定每年的1、3、5、7、8、10、12
月為大月,每月31天;4、6、9、11月為小月,每月30天;2月平年是28天,閏年是29天。
歸納上面的得出結論:
陽歷:
閏年,2月29天,平年28天。
其它月,1、3、5、7、8、10、12為大月31天。
2、4、6、9、11為小月30天。
能被400整除的是閏年;
除能被100整除的不是閏年(能被400整除的除外)其餘能被4整除的是閏年。
所以你只要計算是不是閏年,就可以識別2月份了,所以這個應該不是很難,關鍵
是閏年。
下面是我花了30分鍾寫的程序,我一直用C++,由於不知道C支不支持布爾型,所以兩個判斷的函數返回用整型。你看一下程序能不能運行。我在VC60下編譯通過。
#include "stdio.h"
int IsLeapYear(int Year);//判斷是不是閏年。
int IsCurrentDate(int Year,int Month,int Day);//是不是正確的日期。
int ReturnNextDay(int Year,int Month,int Day);//返回下一天,也有判斷是不是正確的日期。
int LeapYear_Month_SumDay[12]={31,29,31,30,31,30,31,31,30,31,30,31};//閏年數組,保存各月天數。
void main()
{
int Year=0,Month=0,Day=0,NextDay=0;
printf("pleace enter right Date(example:2005 6 27):\n");
scanf("%d%d%d",&Year,&Month,&Day);
NextDay=ReturnNextDay(Year,Month,Day);
switch (NextDay)
{
case 0: printf("not a current date\n");
break;
case 1:
if (Month==12)
{
Year++;
Month=1;
}
else
{
Month++;
}
break;
}
if (NextDay!=0) printf("The you input next date is %d-%d-%d.Thank use bye bye!\n",Year,Month,NextDay);
}
int IsLeapYear(int Year)
{
if (Year%4==0)
{
if (Year%400) return 1;
else
{
if (Year%100==0) return 0;
else return 1;
}
}
else
{
return 0;
}
}
int IsCurrentDate(int Year,int Month,int Day)
{
if ((Year<0) && (Year>9999) && (Month>12) && (Month<1) && (Day<1) &&(Day>31) )return 0;
else return 1;
}
int ReturnNextDay(int Year,int Month,int Day)
{
int ThisMonthSumDay;
if (IsCurrentDate(Year,Month,Day)==1)
{
ThisMonthSumDay=LeapYear_Month_SumDay[Month-1];
if (Month==2)
{
if (IsLeapYear(Year)==0) ThisMonthSumDay--;
}
if (Day<ThisMonthSumDay)
{
return ++Day;
}
else
{
if (Day==ThisMonthSumDay)
{
return 1;
}
else
{
return 0;
}
}
}
else
{
return 0;
}
}
⑤ 用C語言將微秒轉換成年月日十分秒,求代碼
#include"stdio.h"
intyears(intday,int*year)
{
if(day<365)returnday;
if(*year%4==0&&*year%100!=0||*year%400==0)
{if(day>365)
day-=366;
(*year)++;
}
else
{
day-=365;
(*year)++;
}
day=years(day,year);
returnday;
}
voidmonth(int*mon,int*day,intyear)
{
switch(*mon)
{
case1:case3:case5:case7:case8:
case10:case12:
{
if((*day)>31)
{
(*mon)++;
*day=*day-31;
}
elsereturn;
}break;
case4:case6:case9:case11:
{
if((*day)>30)
{
(*mon)++;
*day=*day-30;
}elsereturn;
}break;
case2:{
if(year%4==0&&year%100!=0||year%400==0)
{
if((*day)>29)
{
(*mon)++;
*day=*day-29;
}elsereturn;
}
else
{
if((*day)>28)
{
(*mon)++;
*day=*day-28;
}elsereturn;
}
}break;
default:break;
}
month(mon,day,year);
}
main()
{
floatn,sec;intday,min,hour,mon=1,y;
intyear;floati;intd;
n=13014961214352750.0;
year=1601;
sec=n/1000000;
day=(int)(sec/3600/24);
i=day*24.0*3600;
sec-=i;
d=sec;
min=d/60%60;
hour=d/3600;
i=hour*3600+min*60;
sec-=i;
d=sec;
day=years(day,&year);
month(&mon,&day,year);
printf("thetimeis %d/%2d/%2d%2d:%2d:%2.0f ",year,mon,day,hour,min,sec);
}
新手,笑納
⑥ C語言實驗--轉換日期格式
#include<stdio.h>
intmain(void)
{
inty,m,d;
scanf("%d/%d/%d",&m,&d,&y);
printf("%d.%02d.%02d",y,m,d);
return0;
}
⑦ C語言,輸入年月日,輸出星期幾
#include<stdio.h>
#define SIZE 31
void inputCheck(int,int,int);
int leaYear(int);
main()
{
int year,month,day,d1,result,sum=0;
scanf("%d%d%d",&year,&month,&day);
inputCheck(year,month,day);
for(;year>1; year--)
{
if((year%4==0 && year%100!=0)||(year%400==0))
sum+=366;
else
sum+=365;
}
d1=leaYear(month);
if((year%4==0 && year%100!=0) || (year%400==0))
{
result=(sum+d1+day)%7;}
else
{ if(month>2)
result=(sum+d1+day-1)%7;
else result=(sum+d1+day)%7;
}
switch(result)
{
case 1:printf("Monday\n");break;
case 2:printf("Tuesday\n");break;
case 3:printf("Wedensday\n");break;
case 4:printf("Thurfay\n");break;
case 5:printf("Friday\n");break;
case 6:printf("Saturday\n");break;
case 7:printf("Sunday\n");break;
}
return 0;
}
int leaYear(int m)
{
int t=0;
for(; m>1;m--)
{
switch(m)
{
case 2:
t+=29;
break;
case 4:
case 6:
case 9:
case 11:
t+=30;
break;
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
t+=31;break;
}
}
return t;
}
void inputCheck(int year,int month,int day)
{
if(year<0)
printf("input is wrong!\n");
else
{
switch(month)
{
case 2:
if(day>28 && (!((year%4==0 && year%100!=0) || (year%400==0))))
printf("input is wrong!\n");
if(day>29 && ((year%4==0 && year%100!=0) || (year%400==0)))
printf("input is wrong!\n");break;
case 4:
case 6:
case 9:
case 11:
if(day>30)
printf("input is wrong!\n");break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(day>31)
printf("input is wrong!\n");
}
}
}
感覺應該加上判斷輸入數據是否合格的函數,即便沒這個要求,我用測試數據1900 1 1試了試,我的結果是星期一,你的錯誤你來找吧
⑧ 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
}
⑨ 儒略日計算
求出給定年(I),月(J),日(K)的儒略日:
儒略日= K - 32075 + 1461 * (I + 4800 + (J-14)/12)/4+367*(J-2-(J-14)/12*12)/12-3*((I+4900+(J-14)/12)/100)/4
例如1986年12月25日的儒略日(I=1986,J=12,K=25)=2446791
儒略日(Julian day)是指由公元前4713年1月1日,協調世界時中午12時開始所經過的天數,多為天文學家採用,用以作為天文學的單一歷法,把不同歷法的年表統一起來。
儒略日是一種不用年月的長期紀日法,簡寫為JD。是由法國學者Joseph Justus Scliger(1540–1609)在1583年所創,這名稱是為了紀念他的父親——義大利學者Julius Caesar Scaliger(1484–1558)。
儒略日的起點訂在公元前4713年(天文學上記為 -4712 年)1月1日格林威治時間平午(世界時12:00),即JD 0 指定為 4713 B.C. 1月1日12:00 UT到4713 B.C. 1月2日12:00 UT的24小時。每一天賦予了一個唯一的數字,順數而下,如:1996年1月1日12:00:00的儒略日是2450084。這個日期是考慮了太陽、月亮的運行周期,以及當時收稅的間隔而訂出來的。Joseph Scliger定義儒略周期為7980年,是因28、19、15的最小公倍數為28×19×15=7980。其中:
28年為一太陽周期(solar cycle),經過一太陽周期,則星期的日序與月的日序會重復。
19年為一太陰周期,或稱默冬章(Metonic cycle),因235朔望月=19回歸年,經過一太陰周期則陰歷月年的日序重復。
15年為一小紀(indiction cycle),此為羅馬皇帝君士坦丁(Constantine)所頒,每15年評定財產價值以供課稅,成為古羅馬用的一個紀元單位,
故以7980年為一儒略周期,而所選的起點公元前4713年,則是這三個循環周期同時開始的最近年份。
以儒略日計日是為方便計算年代相隔久遠或不同歷法的兩事件所間隔的日數。
由於儒略日數字位數太多,國際天文學聯合會於1973年採用簡化儒略日(MJD),其定義為 MJD = JD– 2400000.5。MJD相應的起點是1858年11月17日世界時0時。
⑩ C語言中如何把月日年輸出為年月日
這要看原來的程序中,月日年是怎麼組織的?如果分別存放在三個變數中,那麼只要把這三個變數的輸出順序交換一下就可以了。
例如,
int y,m,dm,d;
printf("請輸入月 日 年:");
scanf("%d%d%d",&m,&d,&y);
printf("%d年%d月%d日",y,m,d);