【问题标题】:24h time after midnight order [closed]午夜订单后 24 小时 [关闭]
【发布时间】:2013-06-27 18:00:00
【问题描述】:

我正面临这个问题。例如,当我从网站结束时间时,我总是得到 0:00h 或 0:30h。这在技术上是在当前日期的开始。但是对于人类来说是在当前日期的末尾。

我需要在一天结束时而不是开始时直接从数据库中对 0:00 到 6:00 进行排序。

我正在使用 java、hibernate 标准、mysql 日期时间。 谢谢大家!

【问题讨论】:

  • 从一个“天”到下一个“天”的截止点在哪里?是在“24:59”吗? “25:00”?
  • 您确实没有提供足够的上下文来获得真正的答案。您想在哪里对这些时间进行不同的排序?在网页上?在查询结果集中?时间是否在数据库中存储为Date 对象?作为字符串?我们需要更好地描述需求。
  • 我同意暂停的决定。我的回答部分基于猜测,总是有风险的。请考虑编辑您的问题,以更详细地解释您要完成的工作。
  • 我已经更新了我的问题。够清楚吗?

标签: java mysql hibernate time


【解决方案1】:

您可以通过在整个应用程序中使用 MySql DATETIME 数据类型来正确排序日期和时间。 Java 等效类是util.Date

根据计算机和电信行业标准,每个日历日的第一毫秒的时间为 00:00.000。因此,如果您将 10 秒添加到 23:59:51.000,您将在第二天得到 00:00:01.000。

听起来您的企业有一个不同的、非标准的规则来描述每一天的开始和结束,用于这个特定的展示。没关系。但是你确实需要非常精确地列举这个规则。午夜在人类努力的许多领域都很重要!

假设您的规则是一天的信息从 [01:00:00 到第二天 01:00:00) 运行。

然后你可以像这样在 MySQL 查询中选择昨天的记录。

WHERE `timestamp` >= CURDATE() - INTERVAL 1 DAY + INTERVAL 1 HOUR
  AND `timestamp` < CURDATE() + INTERVAL 1 HOUR
  ...
ORDER BY `timestamp`

这将以正确的顺序显示您的东西。它不会显示时间 24:01,但会在 23:59 之后显示 00:01。

【讨论】:

  • 这似乎是一个简单而好的答案,我明天试试,我会反馈的。谢谢奥利!
  • 我看不到我可以将它与休眠和我复杂的标准列表集成的方式。我没有找到将 sql 集成到 hibernate Order 子句中的方法。最后,我在数据库中创建了一个 varchar 日期列,其值为 YYYYMMDDHHMM,我将小时数保存为 24 而不是 00,然后得到按此列排序的列表
猜你喜欢
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多