【问题标题】:Convertint millisecond to date将毫秒转换为日期
【发布时间】:2019-12-24 16:13:26
【问题描述】:

我在表格中有一个列,其中包含以毫秒为单位的时间 (2147483647),或者我已经告诉过。我正在尝试将其转换为实际时间(人类时间),但没有那么幸运。我已经尝试了所有我认为会有所帮助的东西,尽管我在谷歌和这里找到的东西都没有帮助。

SELECT arrivalTime, FROM_UNIXTIME(uploadTime), "; //UNIX_TIMESTAMP(uploadTime) * 1000 // UNIX_TIMESTAMP() * 1000

到达时间以不同的时间格式上传,但我已经可以使用了。我还有一张使用不同时间格式的不同表格,它也可以使用,但我将其包含在我的帖子中,以防万一它可以用作参考,或者有人可能会在他们的代码中发现它有用。

Date_Add('1970-01-01 0:0:0', INTERVAL(uploadTime/1000 - (timeZoneOffset*60)) SECOND) AS uploadTime

任何帮助或建议将不胜感激!!!

PS:当前查询给我这个 2038-01-18 22:14:07 作为时间,这显然是错误的。我也试过这个

FROM_UNIXTIME(uploadTime/1000);

但也没有做我想做的事

PSS:好的,我四处打听后发现这个 2147483647 来自 Android getTimeInMillis from calendar.API。希望对任何人都有帮助?

【问题讨论】:

  • 2147483647 应该代表什么时间?
  • @GordonLinoff 报告上传的实际日期
  • @azunyan 这个数字也恰好是PHP's max 32-bit integer。似乎很奇怪
  • 您的输入看起来很像 2^31-1,这是最大的 32 位有符号整数。我认为您可能遇到了溢出问题...
  • 21474836470x7FFFFFFF,这不太可能是正确的,2038-01-18 22:14:07 是将该值正确转换为时间(以秒为单位)

标签: mysql sql


【解决方案1】:

我会在 SQL Server 中做这样的事情

DateAdd(Second, (2147483647/1000), CAST('1970-01-01 00:00:00' AS datetime))  AT TIME ZONE 'Central European Standard Time' AS uploadTime


这给了我输出:


在您更新毫秒来自 Android getTimeInMillis() 之后:

在我上面的函数中使用这个毫秒:

DateAdd(Second, (1566302250040/1000), CAST('1970-01-01 00:00:00' AS datetime))  AT TIME ZONE 'Central European Standard Time'


结果为2019-08-20 11:57:30.000 +02:00,这似乎是正确的。

【讨论】:

  • 但是上传时间不能在70年代,因为到货时间是今年。有人告诉我,这个 2147483647 来自 calendar.API 的 Android getTimeInMillis。到目前为止,我还没有找到任何可以将其转换为我需要的时间的东西。但是,谢谢!
  • 好的,感谢您的更多意见。在这种情况下,您的毫秒数似乎是错误的。我很快就会用安卓截图更新我的答案。
  • 您的上传时间是否可能不是以毫秒为单位的确切时间,而是一个差异(如UploadTime = UPLOADEDTimeMilliSeconds - ArrivalTimeMilliSeconds)?在这种情况下,您必须在该 DateAdd 中使用到达时间来代替“1970-01-01 00:00:00”。
  • 非常感谢您的回复!无法立即回复,我深表歉意!我会在办公室里问这个问题,但你的截图似乎是理想的实际数字!连我的老板都说我们现在的数字看起来很奇怪,尤其是每个报告的上传时间都一样
猜你喜欢
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多