代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
给定任意日期得出星期几
作者:
Dezai.CN
/ 发布于
2013/2/22
/
704
任意日期得出星期几.cpp : 定义控制台应用程序的入口点
// 任意日期得出星期几.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> #include<string> #include<vector> //#include<algorithm> using namespace std; int a[]={2013,2,17}; vector<int> vec(a,a+3); class time { public: time(){} time(const vector<int>& v):vec(v){} friend istream& operator>>(istream&,time&); friend ostream& operator<<(ostream&,const time&); friend long operator-(time&,time&);//计算两个日期的相隔天数 bool test();//测试输入的日期是否合法 time* preday();//返回给定日期的前一天 bool compare(const time&);//与2013-2-17比较大小 private: vector<int> vec; }; long operator-(time& t1,time&t2)////两个具体日期的减法 { long sum=0; time tt1=t1,tt2=t2;/////tt1存放的日期大于tt2存放的日期 if(!t1.compare(t2))//判断两个日期的大小 { tt1=t2; tt2=t1; } if(tt1.vec[0]>tt2.vec[0])//判断两个年份大小,大于则分别计算该两个年份中的要求天数和两年份之间的年份的天数 { switch(tt2.vec[1]) { case 1: sum+=365-tt2.vec[2]; break; case 2: sum+=365-31-tt2.vec[2]; break; case 3: sum+=365-31-28-tt2.vec[2]; break; case 4: sum+=365-31-28-31-tt2.vec[2]; break; case 5: sum+=365-31-28-31-30-tt2.vec[2]; break; case 6: sum+=365-31-28-31-30-31-tt2.vec[2]; break; case 7: sum+=365-31-28-31-30-31-30-tt2.vec[2]; break; case 8: sum+=365-31-28-31-30-31-30-31-tt2.vec[2]; break; case 9: sum+=365-31-28-31-30-31-30-31-31-tt2.vec[2]; break; case 10: sum+=365-31-28-31-30-31-30-31-31-30-tt2.vec[2]; break; case 11: sum+=365-31-28-31-30-31-30-31-31-30-31-tt2.vec[2]; break; case 12: sum+=365-31-28-31-30-31-30-31-31-30-31-30-tt2.vec[2]; break; } if((tt2.vec[0]%400==0||(tt2.vec[0]%100!=0&&tt2.vec[0]%4==0))&&(tt2.vec[1]==1||tt2.vec[1]==2)) sum+=1;//闰年并满足(tt2.vec[1]==1||tt2.vec[1]==2)则总天数加一 for(long i=1;i<tt1.vec[0]-tt2.vec[0];i++) { if((tt2.vec[0]+i)%400==0||((tt2.vec[0]+i)%100!=0&&(tt2.vec[0]+i)%4==0)) sum+=366; else sum+=365; } switch(tt1.vec[1])//计算大的日期中已过的天数 { case 1: sum+=tt1.vec[2]; break; case 2: sum+=31+tt1.vec[2]; break; case 3: sum+=31+28+tt1.vec[2]; break; case 4: sum+=31+28+31+tt1.vec[2]; break; case 5: sum+=31+28+31+30+tt1.vec[2]; break; case 6: sum+=31+28+31+30+31+tt1.vec[2]; break; case 7: sum+=31+28+31+30+31+30+tt1.vec[2]; break; case 8: sum+=31+28+31+30+31+30+31+tt1.vec[2]; break; case 9: sum+=31+28+31+30+31+30+31+31+tt1.vec[2]; break; case 10: sum+=31+28+31+30+31+30+31+31+30+tt1.vec[2]; break; case 11: sum+=31+28+31+30+31+30+31+31+30+31+tt1.vec[2]; break; case 12: sum+=31+28+31+30+31+30+31+31+30+31+30+tt1.vec[2]; break; } if((tt1.vec[0]%400==0||(tt1.vec[0]%100!=0&&tt1.vec[0]%4==0))&&(tt1.vec[1]!=1&&tt1.vec[1]!=2)) sum+=1; } else//两个日期的年份即vec[0]相等时 { if(tt2.vec[1]==tt1.vec[1]) sum+=tt1.vec[2]-tt2.vec[2]; else { switch(tt2.vec[1]) { case 1: switch(tt1.vec[1]) { case 2: sum+=31-tt2.vec[2]+tt1.vec[2]; break; case 3: sum+=31-tt2.vec[2]+28+tt1.vec[2]; break; case 4: sum+=31-tt2.vec[2]+28+31+tt1.vec[2]; break; case 5: sum+=31-tt2.vec[2]+28+31+30+tt1.vec[2]; break; case 6: sum+=31-tt2.vec[2]+28+31+30+31+tt1.vec[2]; break; case 7: sum+=31-tt2.vec[2]+28+31+30+31+30+tt1.vec[2]; break; case 8: sum+=31-tt2.vec[2]+28+31+30+31+30+31+tt1.vec[2]; break; case 9: sum+=31-tt2.vec[2]+28+31+30+31+30+31+31+tt1.vec[2]; break; case 10: sum+=31-tt2.vec[2]+28+31+30+31+30+31+31+30+tt1.vec[2]; break; case 11: sum+=31-tt2.vec[2]+28+31+30+31+30+31+31+30+31+tt1.vec[2]; break; case 12: sum+=31-tt2.vec[2]+28+31+30+31+30+31+31+30+31+30+tt1.vec[2]; break; } break; case 2: switch(tt1.vec[1]) { case 3: sum+=28-tt2.vec[2]+tt1.vec[2]; break; case 4: sum+=28-tt2.vec[2]+31+tt1.vec[2]; break; case 5: sum+=28-tt2.vec[2]+31+30+tt1.vec[2]; break; case 6: sum+=28-tt2.vec[2]+31+30+31+tt1.vec[2]; break; case 7: sum+=28-tt2.vec[2]+31+30+31+30+tt1.vec[2]; break; case 8: sum+=28-tt2.vec[2]+31+30+31+30+31+tt1.vec[2]; break; case 9: sum+=28-tt2.vec[2]+31+30+31+30+31+31+tt1.vec[2]; break; case 10: sum+=28-tt2.vec[2]+31+30+31+30+31+31+30+tt1.vec[2]; break; case 11: sum+=28-tt2.vec[2]+31+30+31+30+31+31+30+31+tt1.vec[2]; break; case 12: sum+=28-tt2.vec[2]+31+30+31+30+31+31+30+31+30+tt1.vec[2]; break; } break; case 3: switch(tt1.vec[1]) { case 4: sum+=31-tt2.vec[2]+tt1.vec[2]; break; case 5: sum+=31-tt2.vec[2]+30+tt1.vec[2]; break; case 6: sum+=31-tt2.vec[2]+30+31+tt1.vec[2]; break; case 7: sum+=31-tt2.vec[2]+30+31+30+tt1.vec[2]; break; case 8: sum+=31-tt2.vec[2]+30+31+30+31+tt1.vec[2]; break; case 9: sum+=31-tt2.vec[2]+30+31+30+31+31+tt1.vec[2]; break; case 10: sum+=31-tt2.vec[2]+30+31+30+31+31+30+tt1.vec[2]; break; case 11: sum+=31-tt2.vec[2]+30+31+30+31+31+30+31+tt1.vec[2]; break; case 12: sum+=31-tt2.vec[2]+30+31+30+31+31+30+31+30+tt1.vec[2]; break; } break; case 4: switch(tt1.vec[1]) { case 5: sum+=30-tt2.vec[2]+tt1.vec[2]; break; case 6: sum+=30-tt2.vec[2]+31+tt1.vec[2]; break; case 7: sum+=30-tt2.vec[2]+31+30+tt1.vec[2]; break; case 8: sum+=30-tt2.vec[2]+31+30+31+tt1.vec[2]; break; case 9: sum+=30-tt2.vec[2]+31+30+31+31+tt1.vec[2]; break; case 10: sum+=30-tt2.vec[2]+31+30+31+31+30+tt1.vec[2]; break; case 11: sum+=30-tt2.vec[2]+31+30+31+31+30+31+tt1.vec[2]; break; case 12: sum+=30-tt2.vec[2]+31+30+31+31+30+31+30+tt1.vec[2]; break; } break; case 5: switch(tt1.vec[1]) { case 6: sum+=31-tt2.vec[2]+tt1.vec[2]; break; case 7: sum+=31-tt2.vec[2]+30+tt1.vec[2]; break; case 8: sum+=31-tt2.vec[2]+30+31+tt1.vec[2]; break; case 9: sum+=31-tt2.vec[2]+30+31+31+tt1.vec[2]; break; case 10: sum+=31-tt2.vec[2]+30+31+31+30+tt1.vec[2]; break; case 11: sum+=31-tt2.vec[2]+30+31+31+30+31+tt1.vec[2]; break; case 12: sum+=31-tt2.vec[2]+30+31+31+30+31+30+tt1.vec[2]; break; } break; case 6: switch(tt1.vec[1]) { case 7: sum+=30-tt2.vec[2]+tt1.vec[2]; break; case 8: sum+=30-tt2.vec[2]+31+tt1.vec[2]; break; case 9: sum+=30-tt2.vec[2]+31+31+tt1.vec[2]; break; case 10: sum+=30-tt2.vec[2]+31+31+30+tt1.vec[2]; break; case 11: sum+=30-tt2.vec[2]+31+31+30+31+tt1.vec[2]; break; case 12: sum+=30-tt2.vec[2]+31+31+30+31+30+tt1.vec[2]; break; } break; case 7: switch(tt1.vec[1]) { case 8: sum+=31-tt2.vec[2]+tt1.vec[2]; break; case 9: sum+=31-tt2.vec[2]+31+tt1.vec[2]; break; case 10: sum+=31-tt2.vec[2]+31+30+tt1.vec[2]; break; case 11: sum+=31-tt2.vec[2]+31+30+31+tt1.vec[2]; break; case 12: sum+=31-tt2.vec[2]+31+30+31+30+tt1.vec[2]; break; } break; case 8: switch(tt1.vec[1]) { case 9: sum+=31-tt2.vec[2]+tt1.vec[2]; break; case 10: sum+=31-tt2.vec[2]+30+tt1.vec[2]; break; case 11: sum+=31-tt2.vec[2]+30+31+tt1.vec[2]; break; case 12: sum+=31-tt2.vec[2]+30+31+30+tt1.vec[2]; break; } break; case 9: switch(tt1.vec[1]) { case 10: sum+=30-tt2.vec[2]+tt1.vec[2]; break; case 11: sum+=30-tt2.vec[2]+31+tt1.vec[2]; break; case 12: sum+=30-tt2.vec[2]+31+30+tt1.vec[2]; break; } break; case 10: switch(tt1.vec[1]) { case 11: sum+=31-tt2.vec[2]+tt1.vec[2]; break; case 12: sum+=31-tt2.vec[2]+30+tt1.vec[2]; break; } break; case 11: sum+=30-tt2.vec[2]+tt1.vec[2]; break; } if(tt1.vec[0]%400==0||(tt1.vec[0]%100!=0&&tt1.vec[0]%4==0)) { if((tt2.vec[1]==1&&tt1.vec[1]!=2)||tt2.vec[1]==2) sum+=1; } } } if(t1.compare(t2)) return sum; return -sum; } bool time::compare(const time& tt)////大于形参tt则返回true { if((vec[0]>tt.vec[0])||(vec[0]==tt.vec[0]&&vec[1]>tt.vec[1])||(vec[0]==tt.vec[0]&&vec[1]==tt.vec[1]&&vec[2]>tt.vec[2])) return true; return false; } istream& operator>>(istream& is,time& t) { string st; while(getline(cin,st,'-')) t.vec.push_back(stoi(st)); cin.clear(); return is; } ostream& operator<<(ostream& os,const time& t) { os<<t.vec[0]<<"-"<<t.vec[1]<<"-"<<t.vec[2]; return os; } time* time::preday() { vector<int> vvv; if((vec[1]==5||vec[1]==7||vec[1]==10||vec[1]==12)&&(vec[2]==1)) { vvv.push_back(vec[0]); vvv.push_back(vec[1]-1); vvv.push_back(30); return new time(vvv); } if((vec[1]==2||vec[1]==4||vec[1]==6||vec[1]==8||vec[1]==9||vec[1]==11)&&(vec[2]==1)) { vvv.push_back(vec[0]); vvv.push_back(vec[1]-1); vvv.push_back(31); return new time(vvv); } if(vec[1]==1&&vec[2]==1) { vvv.push_back(vec[0]-1); vvv.push_back(12); vvv.push_back(31); return new time(vvv); } if(vec[1]==3&&vec[2]==1) { vvv.push_back(vec[0]); vvv.push_back(2); if(vec[0]%400==0||(vec[0]%100!=0&&vec[0]%4==0)) vvv.push_back(29); else vvv.push_back(28); return new time(vvv); } vvv.push_back(vec[0]); vvv.push_back(vec[1]); vvv.push_back(vec[2]-1); return new time(vvv); } bool time::test() { int da[]={1,3,5,7,8,10,12}; int xiao[]={4,6,9,11}; if(find(da,da+7,vec[1])!=da+7) { if(vec[2]<1||vec[2]>31) { vec.clear(); return false; } return true; } if(vec[1]==2) { if(vec[0]%400==0||(vec[0]%100!=0&&vec[0]%4==0)) { if(vec[2]<1||vec[2]>29) { vec.clear(); return false; } return true; } if(vec[2]<1||vec[2]>28) { vec.clear(); return false; } return true; } if(find(xiao,xiao+4,vec[1])!=xiao+4) { if(vec[2]<1||vec[2]>30) { vec.clear(); return false; } return true; } return false; } class daily { public: daily(const time& tt):daytime(new time(tt)),use(new int(1)){} daily(const daily&); daily& operator=(const daily&); void del(){if(--*use==0) delete daytime,use;} ~daily(){del();} //int calculate(); void display(); private: time *daytime; int *use; static time standardtime; }; time daily::standardtime(vec); void daily::display() { long sum=*daytime-standardtime; if(sum>=0) { switch(sum%7) { case 0: cout<<"当天为星期日"<<endl; break; case 1: cout<<"当天为星期一"<<endl; break; case 2: cout<<"当天为星期二"<<endl; break; case 3: cout<<"当天为星期三"<<endl; break; case 4: cout<<"当天为星期四"<<endl; break; case 5: cout<<"当天为星期五"<<endl; break; case 6: cout<<"当天为星期六"<<endl; break; } } else { switch((-sum)%7) { case 0: cout<<"当天为星期日"<<endl; break; case 1: cout<<"当天为星期六"<<endl; break; case 2: cout<<"当天为星期五"<<endl; break; case 3: cout<<"当天为星期四"<<endl; break; case 4: cout<<"当天为星期三"<<endl; break; case 5: cout<<"当天为星期二"<<endl; break; case 6: cout<<"当天为星期一"<<endl; break; } } } daily::daily(const daily& d) { ++(*d.use); use=d.use; daytime=d.daytime; } daily& daily::operator=(const daily& d) { ++(*d.use); del(); daytime=d.daytime; use=d.use; return *this; } int _tmain(int argc, _TCHAR* argv[]) { cout<<"日期查询界面"<<endl<<endl; cout<<"请输入具体日期(格式为00-00-00)"<<endl; time t; cin>>t; if(!t.test()) { cout<<"输入的日期有误!"<<endl; return 0; } daily d(t); d.display(); return 0; }
试试其它关键字
星期几
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
Dezai.CN
贡献的其它代码
(
4037
)
.
多线程Socket服务器模块
.
生成随机密码
.
清除浮动样式
.
弹出窗口居中
.
抓取url的函数
.
使用base HTTP验证
.
div模拟iframe嵌入效果
.
通过header转向的方法
.
Session操作类
.
执行sqlite输入插入操作后获得自动编号的ID
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3