读书人

C++ 中小弟我想分别得到日期字符串200

发布时间: 2012-02-09 18:22:27 作者: rapoo

C++ 中我想分别得到日期字符串20070205121255中的年,月,日,小时,怎么做,我是新手,谢谢
C++ 中我想分别得到日期字符串20070205121255中的年,月,日,小时,怎么做,我是新手,谢谢

[解决办法]
#include <stdio.h>

int main()
{
const char * p = "20070205121255 ";
int y , m , d , hh , mm , ss ;

if( 6 != sscanf( p , "%4d%2d%2d%2d%2d%2d " , &y , &m , &d , &hh , &mm , &ss ) )
printf ( "error " );
else
printf ( "%4d-%02d-%02d %02d:%02d:%02d\n " , y , m , d , hh , mm , ss );

return 0;
}


[解决办法]
要知道是周几,首先设定一个基准,例如2007年1月1日是周一,那这里m=2,31+5-1=35,35%7=0,所以2007年2月5日是周一。按这个思路不难写出你需要的效果。
[解决办法]
著名的是蔡勒(Zeller)公式。即

w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

  公式中的符号含义如下,w:星期;c:世纪;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。


[解决办法]
int week( int y , int m , int d )
{
int c;
if( m < 3 ) --y , m += 12;
c = y/100 ; y %= 100;
return (y+y/4+c/4-2*c+26*(m+1)/10+d-1)%7;
}

读书人网 >C++

热点推荐