记录:将时间转化为浮点数的函数
最近做的大作业里面有将用户输入的时间(包括年月日小时分钟)转化为浮点数的内容
实际上是之前用.csv文件里的数据格式是用浮点数记录时间的,但是新的作业里面用户输入的并不是浮点数,后面老师给出了新的.csv文件,但是此时我早已做完了
本来是想要用time.h/ctime头文件里面的time_t或者tm数据类型,但是time_t实际上是long类型,而tm数据类型也和浮点数相差甚远,虽然有一些函数可以用,emmmmmm,反正当时我用了一下报错了,当场决定自己写一个函数
但是当时写的函数是比较粗糙的,因为你不得不考虑到该死的闰年的日期变动问题以及不同月份的天数的问题,而我当时直接把年当365天算,月按30天算
乐死了
然后在自学数据分析的时候略感无聊,便决定回头写一下这个函数
先上代码:
bool isLeap(const int yy){
return !(yy % 400) || (yy % 100 && !(yy % 4));
}
double timeToDouble(const int yy, const int mm, const int dd, const int h, const int m){
const double month[] = {0.0, 31.0, 28.0, 31.0, 30.0, 31.0, 30.0, 31.0, 31.0, 30.0, 31.0, 30.0, 31.0};
double ans = 0.0;
for(int y = 1900; y < yy; y++)
ans += isLeap(y) ? 366.0 : 365.0;
for(int i = 1; i < mm; i++)
ans += month[i];
if(mm > 2 && isLeap(yy)) ans += 1.0;
ans += 1.0 * dd;
ans += (1.0 * h + 1.0 * m / 60.0) / 24.0;
return ans;
}
仅作记录
这里按照的转化标准是我参考time_t的转化标准写的,然后为了让.csv里的数据更合理,年份是减去1900
转化为浮点数之后也容易比较日期的早晚问题了,返回值是以小时为单位的,看代码也容易看出来
只是当时我觉得麻烦懒得写