把自1970年1月1日以来的秒数转化成年月日(转)

#include <iostream>
using namespace std;

bool IsRound(int year){
 if((year%100)&&(year%4==0)) return 1;
 if((year%100==0)&&(year%400==0)) return 1;
 return 0;
}
int main() {
 int n;
 int year_s[2]= {365*24*60*60, 366*24*60*60};
 int month_s[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
   {31,29,31,30,31,30,31,31,30,31,30,31}};
 int day_s = 24*60*60;
 int hour_s = 60*60;
 int minute_s = 60;

 

 while(cin>>n){
    int temp = n;
    int year=1970;
         int month=1;
         int day=1;
         int hour=0;
         int minute=0;
         int second=0;

    while(temp>=60){

     int flag= IsRound(year);
     if(temp>=year_s[flag]) { year++; temp-=year_s[flag]; }
     else if(temp>=day_s){
      int days = temp/day_s;
      temp=temp%day_s;
      int i=0;
      int flag = IsRound(year);
      int hh=31;
      while(days>=hh){
       days-=month_s[flag][i++];
       hh=month_s[flag][i];
       }
      month+= i;
      day+=days;

     }else if(temp>=hour_s){
          hour=temp/hour_s;
          temp%=hour_s;
     }else if(temp>=minute_s){
           minute = temp/minute_s;
           temp%=minute_s;
     }
     }
     second = temp;

        cout<<year<<"-";
      if(month/10==0) cout<<"0";
      cout<<month<<"-";
      if(day/10==0) cout<<"0";
      cout<<day<<" ";
      if(hour/10==0) cout<<"0";
      cout<<hour<<":";
      if(minute/10==0) cout<<"0";
      cout<<minute<<":";
      if(second/10==0) cout<<"0";
      cout<<second<<endl;
 }


 return 0;
}

posted @ 2010-09-06 16:09  天堂大鸟  阅读(5743)  评论(0编辑  收藏  举报