我有一个查询:
Select Cast(Datediff(MINUTE, '19700101', Cast(GETDATE() As date)) As bigint) *60000 + Datediff(ms, '19000101', Cast(GETDATE() As time));
给出了输出:
1395065961607
在 Java ,
中Date d = new Date(1395065961607L);
输出为:
Mon Mar 17 **22**:19:21 MYT 2014
但我的输出应为:
Mon Mar 17 **14**:19:21 MYT 2014
如何在查询中实现此目的?
答案 0 :(得分:0)
您需要做的是考虑您的计算,考虑Java的标准基准时间(称为“纪元”,即1970年1月1日,格林威治标准时间00:00:00)。 Java标准基准时间的关键要素是“GMT”时区,您在上面的原始帖子中没有说明这一点。
因此,考虑到这一点,您必须按照以下方式考虑“时代”与当地时区的当前时刻:
SELECT (Cast(DateDiff(day, Cast('1970-01-01 00:00:00 +00:00' AS datetimeoffset), SysDateTimeOffset()) AS bigint) * 86400000)
+ DateDiff(millisecond, DateAdd(day, DateDiff(day, Cast('1970-01-01 00:00:00 +00:00' AS datetimeoffset), SysDateTimeOffset()), Cast('1970-01-01 00:00:00 +00:00' AS datetimeoffset)), SysDateTimeOffset())
我希望这会有所帮助。