① 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);