我有一个Sqlite数据库,我将其用作Quartz.net调度程序作业的ado.net工作存储。在一个表中,名为START_TIME的列的类型为big int。
有没有办法将bigint转换或转换为日期值?我希望能够查询数据库以查看在哪个日期/时间安排了哪些作业,并且诸如633869892000000000之类的值毫无意义。
谢谢!
答案 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的更多详细信息。
要将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-27T17:00:00
答案 4 :(得分:0)
此解决方案只给我一列空值:
从logging_event中选择日期时间(timestmp,'unixepoch')