程序开发过程中记录时间戳一般都会用到time_t格式,笔者在进行Hbase rowkey构建时用到了相关之间戳,怎样有效的减少时间戳位数同时又能保证表达的时间范围足够使用就需要进行研究。
以C程序为例进行测试:
#include <time.h>
#include <stdio.h>
char Chars[256] = {0};
const char* time2string(const time_t t){
struct tm gmt;
localtime_r(&t, &gmt);
strftime(Chars, 255, "%Y-%m-%d %H:%M:%S", &gmt);
return Chars;
}
int main(int argc, char** argv){
time_t t = time(NULL);
time_t t1 = 1;
fprintf(stdout, "time(NULL):%lld\t%s\n", t, time2string(t));
fprintf(stdout, "time max(32bit):%lld\t %s\n", (t1<<31)-1, time2string((t1<<31)-1)); //0x7fffffff
fprintf(stdout, "time max(64bit):%lld\t %s\n", (t1<<63)-1, time2string((t1<<63)-1)); //0x7fffffffffffffff
fprintf(stdout, "10位数:%lld\t %s\n", 9999999999, time2string(9999999999));
fprintf(stdout, "11位数:%lld\t %s\n", 99999999999, time2string(99999999999));
return 0;
}