gpt4 book ai didi

android - sqlite 四舍五入 'error'

转载 作者:行者123 更新时间:2023-11-29 17:47:15 24 4
gpt4 key购买 nike

我在 Android 设备上使用 SQLite。

我正在尝试将时间戳转换为儒略日,并通过将结果转换为整数来向下舍入儒略日。出于某种原因,2456902.0 被舍入为 2456901。(我也使用“舍入”函数得到相同的结果)

我确实需要一种解决方法,但如果有人有解决方法,我还想解释为什么会发生这种情况。

我的代码和结果如下:

cast(julianday((c.ts/1000), 'unixepoch') as int) as day, 
julianday((c.ts/1000), 'unixepoch') as jd

当 ts = 1409564846705, jd = 2456902.0, day = 2456901 (datetime is Mon Sep 01 04:47:26 CDT 2014)

当 ts = 1409631153881, jd = 2456902.8, day = 2456902 (datetime is Mon Sep 01 23:12:33 CDT 2014)

我正在尝试将时间戳转换为儒略日以按天对记录进行分组,但是一些数据落入了错误的日期(正如您在上面看到的,如果我按天分组将产生两条记录,但日期是同一天的一部分)。我求助于: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 四舍五入 'error',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25626782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com