概述
需求:ck使用DateTime存储时间,根据时间筛选ck中的数据(其他数据库未测试)
问题:如果使用时间戳(Java对应的Long数字)作为筛选条件,10位秒级时间戳和13位毫秒级时间戳的问题
解决:
1.毫秒级时间戳(Java api默认是毫秒级)转秒级时间戳
2.也可以使用时间字符串(年-月-日 时:分:秒的字符串)进行在ck进行筛选
public class TimeStampTest { public static void main(String[] args) { Instant nowLocalDateTimeInstant = LocalDateTime.now().toInstant(OffsetDateTime.now(ZoneId.systemDefault()).getOffset()); long nowLocalDateTimeStamp = nowLocalDateTimeInstant.toEpochMilli(); System.out.println(nowLocalDateTimeStamp); // 13位毫秒级时间戳 1663640926780 DateTime now = new DateTime(); System.out.println(now.getTime()); // 13位毫秒级时间戳 1663640926780 // java.sql.Timestamp Timestamp timestamp = Timestamp.valueOf(LocalDateTime.now()); System.out.println(timestamp); // 2022-09-20 10:32:01.5202772 long time = timestamp.getTime(); System.out.println(time); // 13位毫秒级时间戳 1663640926780 // ck如果使用秒级日期属性字段:Datetime接受年-月-日 时:分:秒的字符串,比如2019-12-16 20:50:10 // 那么对应Java如果使用时间戳的lang字符串数字(13位时间戳)作为检索条件,可能会出错(数据库的10为的时间戳) // 解决方案:Java获取10位时间戳(java.util.concurrent.TimeUnit) // eg:获取当前时间的10位秒级时间戳 long seconds = TimeUnit.MILLISECONDS.toSeconds(Timestamp.valueOf(LocalDateTime.now()).getTime()); System.out.println(seconds); // 10位毫秒级时间戳 1663640926 } } |
ck案例:
create table if not exists clickhouse_db.date( id String, `time` ) engine = MergeTree order by (id); insert into clickhouse_db.`date` (id,`time`) values (1,'2022-09-17 06:06:06'); insert into clickhouse_db.`date` (id,`time`) values (2,'2022-09-18 06:06:06'); insert into clickhouse_db.`date` (id,`time`) values (3,now()); alter table clickhouse_db.`date` delete where id = '1' or id = '2' or id = '3'; -- 1663452366 = 1663452366000 = '2022-09-18 06:06:06' -- 毫秒时间戳(13位):1663452366000,Java时间戳默认毫秒级 -- 秒级时间戳(10位):1663452366,ck使用的time字段,使用类型DateTime为秒级,接受年-月-日 时:分:秒的字符串 select * from clickhouse_db.`date` where `time` > now(); --空 select * from clickhouse_db.`date` where `time` < now(); --3数据(全部插入的) select * from clickhouse_db.`date` where `time` > 1663452366000; --空 select * from clickhouse_db.`date` where `time` > 1663452366; --id为3的now这条 |
最后
以上就是帅气信封为你收集整理的clickhouse和Java时间戳10位秒级和13位毫秒级,查询sql问题的全部内容,希望文章能够帮你解决clickhouse和Java时间戳10位秒级和13位毫秒级,查询sql问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复