C++ 如何从数据库解析日期时间格式?

C++ 如何从数据库解析日期时间格式?,c++,sqlite,date,datetime,C++,Sqlite,Date,Datetime,数据库(SQLite)有一个类型为REAL的字段,其值的形式为(42153.659595)。 如果42153.659595=29.05.2015 15:49:49,如何将该值转换为“dd.MM.yy HH:MM:ss”形式?您可以明确说明需要什么日历系统: 原则上,不要“解析”(您的意思是:解释原始表示)。使用Sqlite API/内置SQL函数为您执行此操作 为了获得信息: 日期和时间函数使用 函数的作用是:返回“YYYY-MM-DD HH:MM:SS”。函数的作用是:返回朱利安日,即公元前

数据库(SQLite)有一个类型为REAL的字段,其值的形式为(42153.659595)。
如果42153.659595=29.05.2015 15:49:49,如何将该值转换为“dd.MM.yy HH:MM:ss”形式?

您可以明确说明需要什么日历系统:

原则上,不要“解析”(您的意思是:解释原始表示)。使用Sqlite API/内置SQL函数为您执行此操作

为了获得信息:

  • 日期和时间函数使用
  • 函数的作用是:返回“YYYY-MM-DD HH:MM:SS”。函数的作用是:返回朱利安日,即公元前4714年11月24日格林威治中午之后的天数(公历前)
  • date()函数以以下格式返回日期:YYYY-MM-DD。time()函数以HH:MM:SS的形式返回时间
使用API/内置SQL函数获得正确的值(42153.659595-来自数据库的值):

输出:

          DT       |
2015-05-29 15:49:49|
手动选择常数2415018.29167,并进行查询:

SELECT datetime (2415018.29167);
返回当前格林威治标准时间


我使用的是第三方应用程序,数据库上的文档缺失。也许这是一个奇怪的决定,但它奏效了。谢谢大家的回答。

我发现(42153)的总数是从1900开始的天数:42153/365=115.4876712328767。2015 - 1900 = 115. 但究竟是如何计算闰年的呢?这意味着分数部分?分数部分是秒数除以一天中的秒数(86400)0.659595=49/3600.0+49/86400.0+15/24.0。对于整数部分,最好查看日期转换函数。即使是gmtime,如果2038错误对您来说不是问题,这里也没有
gregorian
修饰符。@CL.Mmm。那很有趣。我从一本书中摘取了这个例子。在发布答案之前,我更新了最新版本的链接。它可能会被更改,或者只是从文档中删除?无论如何,答案依然存在;文档是耐心的:)这个例子从来都不正确(至少对于SQLite 3是这样);这个查询返回NULL。@CL。你想说什么?旧文档不正确(即使您没有测试它)?我认为这不是很重要。可以选择一个数字2415018.29167,它在以下组合中正确工作:“选择datetime(julianday(42153.659595,'localtime')+2415018.29167);”:我们获得所需的值:“29-05-2015 15:49:49”。如果您执行“选择日期时间(2415018.29167,'localtime')作为dt;”:我们得到“1899-12-30 00:00:00”。因此,数据库以朱利安格式存储1900年以来的日期。
          DT       |
2015-05-29 15:49:49|
SELECT datetime (2415018.29167);