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



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

API文档中给出的示例是:

"时间间隔":{"持续时间":"PT1M4S",(例如:PT1H30M15S-1小时30分15秒("end":"2018-06-12T14:01:41Z","开始":"2018-06-12T14:00:37Z"},

我的问题是:

  1. 如何将持续时间转换为有意义的内容;以及
  2. 假设我使用varchar或nvarchar作为数据类型,那么我需要满足的最大大小是多少

您使用的是ISO 8601:2004(en(持续时间ISO格式。

你有一个如下的模式:;PnnYnnMnnDTnnHnnMnnS";

详细信息:

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

所以对于您的问题:

如果你可以在保存到数据库之前使用C#语言,你可以使用这样的东西解码模式:

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

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

如果你想获得持续时间,你可以进行以下查询:

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

这将返回interval类型的新列"duration"。


如果您真的想创建一个新列,您可以执行SQL触发器,每次向表中添加新条目时,使用"开始"one_answers"结束"列来填充间隔类型的列"持续时间"。

最新更新