我在Android设备上使用SQLite。
我正在尝试将时间戳转换为儒略日,并通过将结果转换为整数来舍入儒略日。由于某种原因,2456902.0被四舍五入为2456901。(我也使用'round'函数得到了相同的结果)
我确实需要一种变通方法,但是我也想解释一下如果有人拥有一个为什么会发生这种情况。
我的代码和结果如下:
cast(julianday((c.ts/1000), 'unixepoch') as int) as day,
julianday((c.ts/1000), 'unixepoch') as jd
当ts = 1409564846705,jd = 2456902.0,day = 2456901(日期时间是CDT 2014年9月1日星期一)
当ts = 1409631153881,jd = 2456902.8,day = 2456902(日期时间是CDT 2014年9月1日星期一)
我正在尝试将时间戳转换为儒略日,以按天分组记录,但是某些数据落入错误的日期(如您在上面看到的那样,如果我按天分组,则会产生两条记录,但是日期是同一天)。我诉诸于:strftime('%d',datetime((c.ts / 1000),'unixepoch','localtime'))作为一天。问题是,如果我查询一个月以上,就会有重复的“一个月中的某天”。有一个更好的方法吗?
最佳答案
朱利安天数在中午具有整数值,因此一天的开始是整数之间的一半:
> SELECT julianday(1409631153881/1000, 'unixepoch', 'start of day');
2456902.5
除非精确定义要上一个或下一个正午,否则将儒略日数字四舍五入为整数是没有意义的。
如果只想按天分组,请将值转换为日期字符串:
date(c.ts / 1000, 'unixepoch', 'localtime')
如果您想要一个可以转换为数字的值,请结合年份和年份:
cast(strftime('%Y%j', c.ts / 1000, 'unixepoch', 'localtime') as int)
另外,只需将时间戳除以一天中的毫秒数即可,但是您需要减去时区的适当偏移量。
关于android - sqlite舍入“错误”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25626782/