加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在查询中将DateTime.Ticks转换为MySQL DateTime

发布时间:2020-12-16 01:36:40 所属栏目:百科 来源:网络整理
导读:我在 MySql中有一个存储DateTime.Ticks的整数列. A single tick represents one hundred nanoseconds or one ten-millionth of a second. There are 10,000 ticks in a millisecond. The value of this property represents the number of 100-nanosecond in
我在 MySql中有一个存储DateTime.Ticks的整数列.

A single tick represents one hundred nanoseconds or one ten-millionth of a second. There are 10,000 ticks in a millisecond.

The value of this property represents the number of 100-nanosecond intervals that have elapsed since 12:00:00 midnight,January 1,0001

如何在查询中将其转换为DateTime?我尝试了很多东西,但无法让它发挥作用.

对于ticks 634128921500016150我希望得到mysql datetime’2010-06-23 12:06:50′

我相信以下应该可行,但它给出’4009-06-22 12:15:50.001600′.它似乎已经过去了2001年,1天9分钟……如果岁月和天数一致,我可以手动修复它,但分钟似乎有些奇怪.

SELECT DATE_ADD('0000-01-01 00:00:00',INTERVAL 634128921500016150/10000000 SECOND_MICROSECOND);

我尝试添加更多的零,但它永远不会匹配:|

我也尝试了Jon Skeet的建议,但它给出了几乎相同的结果(一些不同的一小部分)

解决方法

而不是使用SECOND_MICROSECOND添加,尝试只通过MICROSECOND添加:

SELECT DATE_ADD('0001-01-01 00:00:00',INTERVAL 634121049314500000/10 MICROSECOND);

编辑:我刚刚解决了为什么岁月如此错误. MySQL的minimum date是1000年.所以我建议你把它改成:

SELECT DATE_ADD('0001-01-01 00:00:00',INTERVAL (634121049314500000 - base_ticks)/10 MICROSECOND);

其中base_ticks是来自新DateTime(1001,1,1)的滴答值.Ticks.

哎呀,你可以在任何你想要的地方(例如2000年)进行改造 – 这甚至可能在9分钟的问题上发挥作用.多年来它有可能弥补闰秒,或类似的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读