TimeIntervalDto 对象中的持续时间数据类型

Duration data type in TimeIntervalDto object

我正在创建一个数据库来存储在 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 作为数据类型,我需要满足的最大大小是多少?

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

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

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

这将 return 您在 interval 类型中的新列 "duration"。


如果您真的想创建一个新列,您可以执行一个 SQL 触发器来使用 [=26] 填充 interval 类型的列 "duration" =] 和 "end" 列每次将新条目添加到 table.

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

您的模式如下:“PnnYnnMnnDTnnHnnMnnS”

详细:

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

所以对于你的问题:

如果您可以在保存到数据库之前使用 C# languange,您可以使用如下方式解码 de pattern:

 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