将Sqlite BigInt转换为Date

时间:2009-08-27 17:08:28

标签: sqlite date bigint

我有一个Sqlite数据库,我将其用作Quartz.net调度程序作业的ado.net工作存储。在一个表中,名为START_TIME的列的类型为big int。

有没有办法将bigint转换或转换为日期值?我希望能够查询数据库以查看在哪个日期/时间安排了哪些作业,并且诸如633869892000000000之类的值毫无意义。

谢谢!

5 个答案:

答案 0 :(得分:7)

假设START_TIME是标准秒 - 自Unix-epoch,你可以使用:

select datetime(MyBigIntColumn, 'unixepoch');

请参阅http://www.sqlite.org/lang_datefunc.html,“修饰符”部分。

答案 1 :(得分:7)

这似乎对我有用;从YourTable中选择日期时间(DateColumn / 10000000 - 62135596800,' unixepoch')

致信; https://forums.xamarin.com/discussion/54282/sqlite-datetime-convert-to-net-datetime

答案 2 :(得分:2)

从公共年龄(CA)或圣诞节开始,这是几百纳秒(1 ns = 1/10 ^ 9秒)。 要将日期从此格式转换为正常日期:

1。首先,您需要通过以下公式将633869892000000000 = YourDateHundredsOfNanoSecondsCA(100'nanoseconds)转换为Unixepoch格式(自1970年1月1日起至您的日期的秒数):

(YourDateHundredsOfNanoSecondsCA-(ROUND(1969 *(365 + 1 / 4-1 / 100 + 1/400),0)-2)* 24 * 60 * 60 * 1E9 / 100)* 100 / 1E9,

其中:

1.1 ROUND(1969 *(365 + 1 / 4-1 / 100 + 1/400),0)-2)= DaysOf1970Years - 从Jeasus出生到1970年1月1日的天数。

1.2 HundredsOfNanoSecondsOf1970Years = DaysOf1970Years * 24 * 60 * 60 * 1E9 / 100 - 从Common Age开始直到Unix Epoch开始(1970年1月1日)几百纳秒。

1.3 YourDateInUnixEpochSeconds =(YourDateHundredsOfNanoSecondsCA-HundredsOfNanoSecondsOf1970Years)* 100 / 1E9 - 从1970年1月1日到你的约会的秒数。

2。按功能将Unix Epoch格式日期转换为可读格式(我为SQLite提供示例):

SELECT datetime(YourDateInUnixEpochSeconds,'unixepoch');

对于您的示例,您可以将此字符串复制到SQLiteStudio中的SQL查询编辑器并运行:

SELECT datetime((633869892000000000-(ROUND(1969 *(365 + 1 / 4-1 / 100 + 1/400),0)-2)* 24 * 60 * 60 * 1E9 / 100)* 100 / 1E9 ,'unixepoch');

因此您将获得'2010-12-19 17:00:00'

答案 3 :(得分:0)

此日期时间存储为“刻度”。以下链接涵盖了有关tick的更多详细信息。

DateTime.Ticks Property

要将Ticks转换为日期时间,可以使用SQL查询为

select datetime(START_TIME/10000000 - 62135596800, 'unixepoch') 
--output 2009-08-27 17:00:00

可以在c夏普中将刻度转换为DateTime。

DateTime dt = new DateTime(633869892000000000); //output: 2009-08-27​T17:00:00

答案 4 :(得分:0)

此解决方案只给我一列空值:

从logging_event中选择日期时间(timestmp,'unixepoch')