【发布时间】:2016-05-29 17:59:13
【问题描述】:
此时我正在使用 MySQL 数据库的 Java 应用程序中定义我的数据。我需要的一种数据是日期/时间段。我需要在日期时间存储添加量。
否则我打算使用 Java LocalDateTime 和 MySQL 的 TIMESTAMP 数据类型来存储日期/时间。我计划使用Java Timestamp 函数转换LocalDateTime。
我可以在 MySQL TIMESTAMP 中存储句点吗?它将如何处理“1 天 3 小时 6 分钟”作为TIMESTAMP(不处于一个时代)?如果没有,我正在使用的 Java 方法有什么效果? TIA。
详情编辑添加:
这是供本地使用的,每个发行版在一个时区。 PC 上的 Java 应用程序是通过我的 Java GUI 捕获和查看LocalDateTime 的地方,所需的粒度不会小于几分钟。然后,它们以TIMESTAMP 的形式存储在数据库中。
周期将存储在数据库中的“班次模板”表中,作为一个班次循环中每个班次相对于模板零点的开始和结束时间段。通过循环处理这些班次模板记录,我将计算从给定的开始日期时间到提前几个月的所有“班次”记录(在 Java 中)。
使用示例: 此示例模板将定义 12 小时轮班,白天和黑夜,8 天,4 名工作人员,每个工作 4 天,然后 4 天休息(此模板表中有 16 条记录)。所有值都是调用者零点的附加值。每个预设模板记录包含:
- 班次加额
- 班次开始的时间-日期添加量
- 班次结束的时间-日期添加量
- 班次的工作人员标识符
网格模板(记录)
(时间段显示为 DD:hh:mm)
班次 01: 00:00:00 – 00:12:00,机组 A
班次 02:00:12:00 – 01:00:00,机组 B
班次 03:01:00:00 – 01:12:00,机组 A
…
班次 09: 04:00:00 – 04:12:00,机组 C
10 班:04:12:00 – 05:00:00,机组 D
…(直到 16 班)
接下来是我想从上述模板记录集中生成的班次记录,以 06/01/2016 06:00 为例,开始日期时间(或零点),带有:
- 班次号码
- 班次开始日期时间
- 班次结束日期时间
- 班次的船员标识符
Shift(记录)
(日期时间显示为 MM/DD/YYYY hh:mm)
班次 01:06/01/2016 06:00 – 06/01/2016 18:00,机组 A
班次 02:06/01/2016 18:00 – 06/02/2016 06:00,机组 B
班次 03:06/02/2016 06:00 – 06/02/2016 18:00,机组 A
…
班次 09:06/05/2016 06:00 – 06/05/2016 18:00,机组 C
10 班:2016 年 6 月 5 日 18:00 – 2016 年 6 月 6 日 06:00,船员 D
…
17 班:06/09/2016 06:00 – 06/09/2016 18:00,机组 A
班次 18:06/09/2016 18:00 – 06/10/2016 06:00,机组 B
…
班次 25:2016 年 6 月 13 日 06:00 – 2016 年 6 月 13 日 18:00,船员 C
26 班:2016 年 6 月 13 日 18:00 – 2016 年 6 月 14 日 06:00,船员 D
…
从“偏移”到“句号”从头到尾进行了编辑,并进行了一些澄清
【问题讨论】:
-
对我来说,将时间偏移存储为整数似乎是最直观的。然后该值将对应于分钟/秒/毫秒的数量(取决于您需要的粒度)。如果您需要以其他时间单位表示偏移量,则转换是简单的算术。
-
@MickMnemonic Java 代码将定义粒度。你将如何从 Java 中获取/放置整数?
-
如果不了解您的应用程序,很难回答,但是通过
TimeUnit枚举在 Java 中进行转换很简单。 -
@MickMnemonic 如果您编写了一个使用
LocalDateTime和TimeUnit与int相互转换的简单示例,其中只保留几分钟,我很乐意接受作为答案。 -
你能打开领域模型和用例吗?您是否将时间戳或时间偏移作为输入,即在将数据存储到数据库之前需要计算什么?