时间转换问题
来源:互联网 发布:angularjs post json 编辑:程序博客网 时间:2024/05/18 02:36
//dtmfnct.h
//char=8bt
//int=32bt
//pure c ++ code
#ifndef dtmfnctH
#define dtmfnctH
#include <math.h>
//------------------------------------------------------------------------
int __fastcall strTOdate(char *);
int __fastcall ymdTOdate(int, int, int);
int __fastcall dateTOymd(int &, int &, int &, int);
//--------//--------//--------//--------//--------//--------
int __fastcall strTOtime(char *);
int __fastcall hmsTOtime(int, int, int);
int __fastcall timeTOhms(int &,int &,int &, int);
//--------//--------//--------//--------//--------//--------
int __fastcall IsLeapYear(int);
int __fastcall MonthMaxDay(int, int);
int __fastcall MonthTtlDay(int, int);
int * __fastcall MonthMaxDayTable(int);
int * __fastcall MonthTtlDayTable(int);
//------------------------------------------------------------------------
//字串形式的日期(不包括时间)转换为数值形式,
//例子: "2000_01_30" -> 730148
// "2000_09_45" -> -1(error)
int __fastcall strTOdate(char * vstr)
{
int i,y,m,d;
//
i = y = m = d = 0;
//
for(;vstr[i]!=0;i++)
{
if(vstr[i]>='0' && vstr[i]<='9')
y = y * 10 + (vstr[i]-'0');
else
break;
}
//
while(vstr[i]!=0 &&(vstr[i]<'0' || vstr[i]>'9')) i++;
//
for(;vstr[i]!=0;i++)
{
if(vstr[i]>='0' && vstr[i]<='9')
m = m * 10 + (vstr[i]-'0');
else
break;
}
//
while(vstr[i]!=0 &&(vstr[i]<'0' || vstr[i]>'9')) i++;
//
for(;vstr[i]!=0;i++)
{
if(vstr[i]>='0' && vstr[i]<='9')
d = d * 10 + (vstr[i]-'0');
else
break;
}
//
return(ymdTOdate(y,m,d));
}
//年/月/日的数值转换为数值日期
//例子: 0001_01_01 -> 0
// 2300_90_08 -> -1
//此函数经过 0001_01_01 -- 32767_12_31 的测试.
int __fastcall ymdTOdate(int vy, int vm, int vd)
{
if(vy<1 || vy>32767 || vm<1 || vm>12 || vd<1 || vd>MonthMaxDay(vy,vm))
return(-1);
//
vd += MonthTtlDay(vy,vm)-1;
vy --;
return((vy*365 + vy/4 - vy/100 + vy/400)+vd);
}
//数值日期转换为年/月/日的数值
//数值日期就是从0001_01_01开始计算的天数,启始数值为 0
//此函数经过 0001_01_01 -- 32767_12_31 的测试.
int __fastcall dateTOymd(int& ry, int& rm, int& rd, int vd)
{
if(vd<0)
{
ry = 0;
rm = 0;
rd = 0;
return(0);
}
//--------//--------
ry = vd / 365.2425;
vd -= ry*365 + ry/4 - ry/100 + ry/400;
//
if(IsLeapYear(++ry))
rm = 366;
else
rm = 365;
//
if(vd>=rm)
{
vd -= rm;
ry ++;
}
//--------//--------
rm = vd / 30.436875 + 1 ;
vd -= MonthTtlDay(ry,rm);
if(++vd<=0)
{
vd += MonthMaxDay(ry,rm);
rm --;
}
else if(vd>MonthMaxDay(ry,rm))
{
vd -= MonthMaxDay(ry,rm);
rm ++;
}
//--------//--------
rd = vd;
//
return(1);
}
int __fastcall strTOtime(char *vstr)
{
int i,h,m,s;
//
i = h = m = s = 0;
//
for(;vstr[i]!=0;i++)
{
if(vstr[i]>='0' && vstr[i]<='9')
h = h * 10 + (vstr[i]-'0');
else
break;
}
//
while(vstr[i]!=0 &&(vstr[i]<'0' || vstr[i]>'9')) i ++;
//
for(;vstr[i]!=0;i++)
{
if(vstr[i]>='0' && vstr[i]<='9')
m = m * 10 + (vstr[i]-'0');
else
break;
}
//
while(vstr[i]!=0 &&(vstr[i]<'0' || vstr[i]>'9')) i ++;
//
for(;vstr[i]!=0;i++)
{
if(vstr[i]>='0' && vstr[i]<='9')
s = s * 10 + (vstr[i]-'0');
else
break;
}
//
return(hmsTOtime(h,m,s));
}
//
int __fastcall hmsTOtime(int vh, int vm, int vs)
{
if((vh=(((vh*60 + vm)*60+vs)*1000)%86400000)<0)
vh += 86400000;
return(vh);
}
//
int __fastcall timeTOhms(int& rh, int& rm, int& rs, int vt)
{
if((vt%=86400000)<0)
vt +=86400000;
//
rh = vt / 3600000 ;
rm = (vt % 3600000)/60000;
rs = (vt % 60000 )/1000 ;
//
return(vt%1000);
}
//--------//--------//--------//--------//--------//--------
//判断闰年啦
int __fastcall IsLeapYear(int vy)
{
return(((vy%4)==0) && (((vy%100)!=0)||((vy%400)==0)));
}
int __fastcall MonthMaxDay(int vy, int vm)
{
return(MonthMaxDayTable(vy)[vm-1]);
}
int __fastcall MonthTtlDay(int vy, int vm)
{
return(MonthTtlDayTable(vy)[vm-1]);
}
//
int* __fastcall MonthMaxDayTable(int vy)
{
static int mmd0[12]={31,28,31,30,31,30,31,31,30,31,30,31};
static int mmd1[12]={31,29,31,30,31,30,31,31,30,31,30,31};
//
if(IsLeapYear(vy))
return(mmd1);
else
return(mmd0);
}
int* __fastcall MonthTtlDayTable(int vy)
{
static int mtd0[13]={0,31,59,90,120,151,181,212,243,273,304,334,365};
static int mtd1[13]={0,31,60,91,121,152,182,213,244,274,305,335,366};
//
if(IsLeapYear(vy))
return(mtd1);
else
return(mtd0);
}
#endif
- Java时间转换问题
- 时间格式转换问题
- 时间转换问题
- 时间转换问题
- GMT 时间转换问题
- NSdate时间转换问题
- iOS时间转换问题
- 问题 R 时间转换
- 时间、时间戳互相转换问题
- sql时间格式转换问题
- Oracle中的时间转换问题
- 时间转换中的夏时制问题
- 字符串转换成时间问题
- springmvc jackson 时间转换问题
- 字符串转换时间,时区问题
- Jqgrid的时间转换问题
- java 中时间转换问题
- js-时间的转换问题
- Python 字典
- PHP数据结构——冒泡排序与快速排序的比较
- 关于fmodce.dll的用法小结
- Android--AsyncTask实例
- Linux sockaddr_in赋值
- 时间转换问题
- 深入研究字节对齐问题
- 两台电脑直接用网线连接构建小局域网的方法
- C语言中关于scanf()函数返回值问题
- Win32控制台程序的定时器实现
- 用Delphi编写一个Svchost.exe调用的DLL模块
- php 清除缓存的方法
- 【摘】 GridView 小结与asp。net教程
- MySQL行锁深入研究