参考资料
Julian day number
pg source cdoe “src\backend\utils\adt\datetime.c”(317,1)

PostgreSQL Timestamp通过C函数转换为Date

Datum to_date1(PG_FUNCTION_ARGS) {Timestamp   timestamp = PG_GETARG_TIMESTAMP(0);DateADT     result;struct pg_tm tt,*tm = &tt;fsec_t      fsec;if (TIMESTAMP_IS_NOBEGIN(timestamp))DATE_NOBEGIN(result);else if (TIMESTAMP_IS_NOEND(timestamp))DATE_NOEND(result);else {if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL, NULL) != 0)ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),errmsg("timestamp out of range")));result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - POSTGRES_EPOCH_JDATE;}PG_RETURN_DATEADT(result);
}
Datum to_date2(PG_FUNCTION_ARGS) {TimestampTz timestamp = PG_GETARG_TIMESTAMPTZ(0);DateADT     result;struct pg_tm tt,*tm = &tt;fsec_t      fsec;int         tz;if (TIMESTAMP_IS_NOBEGIN(timestamp))DATE_NOBEGIN(result);else if (TIMESTAMP_IS_NOEND(timestamp))DATE_NOEND(result);else {if (timestamp2tm(timestamp, &tz, tm, &fsec, NULL, NULL) != 0)ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),errmsg("timestamp out of range")));result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - POSTGRES_EPOCH_JDATE;}PG_RETURN_DATEADT(result);
}

timestamp2tm(timestamp dt, int *tzp, struct tm *tm, fsec_t *fsec, const char **tzn),函数实现文件为”\src\interfaces\ecpg\pgtypeslib\timestamp.c”(99,1):\
其中调用了函数
int j2date(int jd, int *year, int *month, int *day),实现文件为”src\backend\utils\adt\datetime.c”(317,1);
int date2j(int y, int m, int d),实现文件为”src\backend\utils\adt\datetime.c”(291,1);
其中一些常量不是太明白,经过搜索,请参看文档
Julian day number

select make_date(2000,1,1) - make_interval(days=>2451545),
make_date(1970,1,1) - make_interval(days=>2440588 )output
4714-11-24 00:00:00 BC, 4714-11-24 00:00:00 BC

因此儒略历的日期偏移为

/* Julian-date equivalents of Day 0 in Unix and Postgres reckoning */
#define UNIX_EPOCH_JDATE        2440588 /* == date2j(1970, 1, 1) */
#define POSTGRES_EPOCH_JDATE    2451545 /* == date2j(2000, 1, 1) */

例如:2000年1月1日中午对应于JD = 2451545.0

drop function if exists d2j(date);
create or replace function d2j(date) returns float8
as $$declarev_year integer;v_month integer;v_day integer;v_a integer; v_y integer;v_m integer;v_jdn integer;v_jd float8;beginv_year := date_part('year',$1);v_month := date_part('month',$1);v_day := date_part('day',$1);v_a := (14-v_month) / 12;v_y := v_year+4800-v_a;v_m := v_month+12*v_a-3;v_jdn := v_day + ((153 * v_m + 2)/5) + (365* v_y) + (v_y / 4) - (v_y / 100) +  (v_y / 400) - 32045;v_jd :=  v_jdn+ ( (0-12)/24 ) + (0/1440) + (0/86400);return  v_jd;end;
$$ language plpgsql;
--验证结果,可以通过"jd mon 7"来计算星期几,其中0表示星期一。
with cte as(select d2j(make_date(2000,1,1)) as f1
)select f1, (((f1::integer)%7) +1) as week from cte;

PostgreSQL 儒略历学习资料相关推荐

  1. 程序员优秀学习资料整理(不断更新中)

    如果你发现自己陷入各种新技术.工具包围中,而纠结于该选择哪些学习,读读这篇文章,技术的执念. 综合资源 资源链接汇集 awesome - 各种主流语言的优秀项目汇集 :+1: lists - 资源集合 ...

  2. go学习资料以及开源代码

    Go 语言方面的大牛,或者优秀 Go 项目的组织 mattn - 写了数百个 Go 项目,盛产优质项目 Unknwon - gogs/macaron 等项目作者,<The Way to Go&g ...

  3. 【收藏清单】AI学习资料汇总——你想要的AI资源,这里都有

    本文汇总了TinyMind站内AI资料类热门文章TOP10,欢迎大家各取所需.来源:https://www.tinymind.cn/ 1.[AI入门者必看]--人工智能技术人才成长路线图 入门AI的两 ...

  4. Django介绍和虚拟环境(django特点、MVC、MVT、Django学习资料)

    MVT流程: 创建Django项目和应用 django-admin startproject name python manager.py startapp name 视图和ULR 视图的请求和响应 ...

  5. 彻底搞懂基于LOAM框架的3D激光SLAM全套学习资料汇总!

    地图定位算法是自动驾驶模块的核心,而激光SLAM则是地图定位算法的关键技术,其重要性不言而喻,在许多AI产品中应用非常多(包括但不限于自动驾驶.移动机器人.扫地机等).相比于传统的视觉传感器,激光传感 ...

  6. 史上最全DSO学习资料

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 DSO(Direct Sparse Odometry)是一种视觉里程计方法.在SLAM领域,DSO属于 ...

  7. 教程 | 一文读懂自学机器学习的误区和陷阱(附学习资料)

    来源:机器学习与统计学 本文约6296字,建议阅读10分钟. 本文为你指出一些自学的误区,推荐学习资料,提供客观可行的学习表并给出进阶学习的建议. 后台回复"20190426"获取 ...

  8. 独家 | 一文带你上手卷积神经网络实战(附数据集学习资料)

    原文标题:Understanding deep Convolutional Neural Networks with a practical use-case in Tensorflow and Ke ...

  9. 限时删!一套目标检测、卷积神经网络和OpenCV学习资料(教程/PPT/代码)

    AI 显然是最近几年非常火的一个新技术方向,从几年前大家认识到 AI 的能力,到现在产业里已经在普遍的探讨 AI 如何落地了. 计算机视觉目前在很多领域都已经实现了商业应用,从现实市场规模角度,目前人 ...

最新文章

  1. pdf转ppt_怎么在线把pdf转ppt?这个pdf转ppt方法太好用
  2. 做好准备迎接崭新的BCH了吗?
  3. php面向对象中的魔术方法中文说明
  4. 在JAVA 中将堆与栈分开的原因
  5. WebStorm 10支持TypeScript 1.4到JavaScript的实时编译
  6. assembly plugin实现自定义打包
  7. Registry Size 提示注册表容量不够!
  8. PHP GZ压缩与解压
  9. 百度地图 android SDKv2.2.0
  10. 一分钟教你解决前端分流问题
  11. 因为制作爬虫程序,我收到了警告
  12. 大创笔记——硬切法实现基于单片机的人机交互系统
  13. Android打造通用标题栏——让你的App统一标题栏风格
  14. c++ string常用函数
  15. 阿里巴巴的合伙人制度!
  16. 一个基于PyTorch实现的Glove词向量的实例
  17. 双十一到了,当我用Python采集了电商平台所有商品后发现....
  18. Python 爬取百度音乐
  19. 【MongoDB】MacOS安装MongoDB完整收录
  20. Apollo项目导航模式下的坐标转换研究

热门文章

  1. 数据分析的目的、方法、思路
  2. JD面试Pass的挫败感
  3. Visp系列学习二:visp显示和visp_ros获取图像
  4. word中插入参考文献标号以及如何引用参考文献
  5. VirtualBox安装CentOS7虚拟机(超级无敌详细)
  6. 行人检测系统中的行人特征及检测方法
  7. 移动端一个按钮长按以及点击事件(js)
  8. 程序员:一个女生不主动联系你还有机会吗?
  9. api21最新导航箭头动画的使用
  10. 教你用PixiJs实现复杂动画