转换 dBase 时间戳

问题描述 投票:0回答:2

我正在尝试将 dBase .dbf 文件转换为 mySQL 数据库...它非常简单,但我被困在我的 .dbf 数据库中使用的时间戳...

这里是一些时间戳+相应的日期和时间值:

41594.722222222 -   16.11.2013, 17:20   3472222
41594.725694444 -   16.11.2013, 17:25   3472223
41594.729166667 -   16.11.2013, 17:30   3472222
41594.732638889 -   16.11.2013, 17:35   3472222
41594.736111111 -   16.11.2013, 17:40   3472222
41594.739583333 -   16.11.2013, 17:45   3472223
41594.743055556 -   16.11.2013, 17:50   3472222
41594.746527778 -   16.11.2013, 17:55   3472222
41594.75        -   16.11.2013, 18:00   3472222
41594.753472222 -   16.11.2013, 18:05   3472222
41594.756944444 -   16.11.2013, 18:10   3472223
41594.760416667 -   16.11.2013, 18:15
41594.763888889 -   16.11.2013, 18:20
41594.767361111 -   16.11.2013, 18:25
41594.770833333 -   16.11.2013, 18:30
41594.774305556 -   16.11.2013, 18:35
41594.777777778 -   16.11.2013, 18:40
41594.78125     -   16.11.2013, 18:45
41594.784722222 -   16.11.2013, 18:50

第一个值 (x.y) 是时间戳,因为它存储在我的 .dbf 文件中。第二个值是相应的 Date_Time 值。第三个值是实际时间戳和下一个时间戳之间的差异(5分钟^^)

我已经在此页面上找到了一些提示: http://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm

它说:“8 个字节 - 两个长整数,第一个是日期,第二个是时间。日期是自公元前 4713 年 1 月 1 日以来的天数。时间是小时 * 3600000L + 分钟 * 60000L + 秒 * 1000L”

我不太确定,如果它适合我的时间戳格式^^当我尝试将天数(41594)转换为年并从“01/01/4713 BC”开始计数时,我离 2013 年还差得很远:D

那么,有没有人知道如何将这种类型的时间戳转换为可读格式?

timestamp dbase
2个回答
2
投票

尝试从 12/31/1899 而不是 01/01/4713 BC 开始计数。


0
投票
char s[64]; double dd; int hh,mm1,sec,yy,mm,day;
long days,secs;
buf[0]=0x42; buf[1]=0xcc; buf[2]=0xb2; buf[3]=0x0e;
buf[4]=0x03; buf[5]=0x04; buf[6]=0xdf; buf[7]=0x00;
memswap((char*)&dd,(char*)&buf,8);
dd = dd / 1000.0;
days = (long) (dd / 86400);
secs = (long) fmod(dd, 86400);
SdnToGregorian(days+1721425, &yy, &mm, &day);
hh = secs/3600;
mm1 = secs/60%60;
sec = secs%60;
sprintf( s, "%04d-%02d-%02d %02d:%02d:%02d",
            yy, mm, day, hh, mm1, sec);
puts(s);
© www.soinside.com 2019 - 2024. All rights reserved.