1

我正在创建一个数据库来存储在 Clockify 中创建的时间条目,我需要为持续时间字段声明一个数据类型。TimeIntervalDto 中返回一个字符串,API 文档中提供的示例是“PT1M4S”或“PT1H30M15S”。如果您知道如何解码,这显然是一个有意义的字符串。

API 文档中给出的示例是:

"timeInterval": { "duration": "PT1M4S", (例如: PT1H30M15S - 1 小时 30 分 15 秒) "end": "2018-06-12T14:01:41Z", "start": "2018-06- 12T14:00:37Z"},

我的问题是:

  1. 我如何将持续时间翻译成有意义的东西;和
  2. 假设我使用 varchar 或 nvarchar 作为数据类型,我需要满足的最大大小是多少?
4

2 回答 2

1

您正在使用 ISO 8601:2004(en) 持续时间 ISO 格式。

您有如下模式:“PnnYnnMnnDTnnHnnMnnS”

详细地:

  • 字母 P 代表句点格式
  • 每个字母代表一个不同的值,例如,如果要表示两年,请使用 02Y。
  • 几个小时使用字母 T。

所以对于你的问题:

如果您可以在保存到数据库之前使用 C# 语言,您可以使用以下内容解码 de 模式:

 String pattern = "PT1H30M15S";
 TimeSpan ts = System.Xml.XmlConvert.ToTimeSpan(pattern); //Use System.Xml because it works with ISO 8601:2004

您可以在 ISO 网页中查找更多信息。https://www.iso.org/obp/ui/#iso:std:iso:8601:ed-3:v1:en

于 2020-09-24T15:06:43.420 回答
0

如果您使用的是 Postgres 数据库,则可以基于结束列和开始列创建新列。因此,您不需要仅为持续时间创建一个新列,因为它已经隐含在其他两列中。

如果您想获取持续时间,您可以执行以下查询:

SELECT (t.end - t.start) as "duration", t.start, t.end from t

这将为您返回间隔类型的新列“持续时间” 。


如果您真的想创建一个新列,您可以执行 SQL 触发器,以在每次将新条目添加到表时使用“start”和“end”列填充类型为“ duration ”的列。

于 2020-04-16T11:47:49.763 回答