时间转换问题

kantonwang2007 2007-09-18 02:32:40
得到从1900/1/1 00:00:00开始经过的秒数,要把这个秒数转换成YYYY/MM/DD HH:MM:SS 表示的格式。

gmtime等函数都是基于1970年开始的,请问如何处理,谢谢!
...全文
133 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kantonwang2007 2007-09-18
  • 打赏
  • 举报
回复
谢谢JohnWoo,我也是这么做的,自己算一下00-70的秒数,以为可以有简单的现成函数呢。
JohnWoo 2007-09-18
  • 打赏
  • 举报
回复
修正上面的话,写Java程序写多了。^_^

是秒数。不是毫秒数。

晕倒....
JohnWoo 2007-09-18
  • 打赏
  • 举报
回复
是啊。计算机表达时间方法的确让全球人民遭灾。^_^


#include "stdafx.h"
#include <iostream>
#include <assert.h>
using namespace std;

//判断是否闰年
bool IsLeapYear(unsigned long year)
{
if( year%4 ) return false;
else
if( year %100 ) return true;
else
if( year % 400 ) return false;
else return true;
}

//根据一年中的第几天(0起始),返回月份(1起始),并且置天数为其在本月的索引(0起始)
unsigned long GetMonthByDay(unsigned long &day,bool leap)
{
assert( day < (leap?366:365) );
static unsigned long monthtable[] = { 31,29,31,30,31,30,31,31,30,31,30,31 } ;
monthtable[1] = leap ? 29:28;

unsigned long month = 0;
unsigned long count = 0;
unsigned long n = day;

do
{
n = day - count;
count += monthtable[month++];
}while( day >= count );
day = n;
return month;
}

//距离1900年1月1日的天数(0起始),返回年,并且置天数为其在本年的索引(0起始)
unsigned long GetYearByDay(unsigned long &day)
{
unsigned long Y = day / 365;
long D = day % 365;
long YY = Y-1;
D -= YY/4;
D += YY/100;
D -= (YY+300)/400;
while( D < 0)
{
Y--;
D += IsLeapYear(Y+1900) ? 366 : 365;
}
day = D;
return Y + 1900;
}

//距离1900年1月1日的天数(0起始),计算这一天的日期(年,月,日)(1起始)。
void foo(unsigned long &day,unsigned long &year,unsigned long &month)
{
year = GetYearByDay(day);
month = GetMonthByDay(day,IsLeapYear(year));
day += 1;
}

int main()
{
unsigned long day = 38555;
unsigned long year = 0;
unsigned long month = 0;
foo(day,year,month);
cout << year << "/" << month << "/" << day << endl;
system("pause");
return 0;
}


这是根据距离1900年1月1日的天数(0起始),计算这一天的日期(年,月,日)。
算法类似。



给你提供一个非常简单的思路,毫秒数只有闰年和非闰年之分的。
闰年 :31622400
非闰年 :31536000
把1970到1900年的毫秒数加起来便是。


long nMilli = 0;
for(int x = 1900; x < 1970; x++){
if( IsLeapYear(x) ){
nMilli += 31622400; // 如果不怕麻烦,你也可以根据闰年的天数,把这个数值算出来。
}else{
nMilli += 31536000;
}
}

cout << nMilli << endl; // 这里就是咯。

kantonwang2007 2007-09-18
  • 打赏
  • 举报
回复
如果只能用c函数呢?
mr.zhoux 2007-09-18
  • 打赏
  • 举报
回复
CTimeSpan对象可以计算时间的差.查下~:)
kantonwang2007 2007-09-18
  • 打赏
  • 举报
回复
或者说如何计算1900/1/1 00:00:00到1970/1/1 00:00:00之间经过的秒数,请教大家

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧