news 2026/9/13 9:34:38

Label Studio DateTime 标签详解:为标注界面添加日期、时间与年份选择

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Label Studio DateTime 标签详解:为标注界面添加日期、时间与年份选择

Label Studio DateTime 标签详解:为标注界面添加日期、时间与年份选择

【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio

导读

DateTime是 Label Studio 标注配置(XML Label Config)中的核心控制标签之一,用于在标注界面中为任务添加日期、时间戳、月份或年份的选取控件。它可配合文本、图片、音视频、HTML、时间序列等几乎所有数据类型使用,并将选择结果以标准化格式写入标注结果(annotation result),供模型训练或数据校验使用。阅读本文后,你将掌握DateTime的完整参数体系、only/format/min/max的组合用法、区域级与条目级标注模式,以及其底层实现与验证机制。

DateTime 标签简介

在 Label Studio 中,DateTime标签向标注界面添加日期和时间选择能力。它的典型应用包括:

  • 为新闻、合同、病历等文本片段标注事件发生日期;
  • 为图像或视频帧标注拍摄时间;
  • 为时间序列数据标注异常发生的时刻;
  • 为结构化数据补充年份、月份等粒度的时间信息。

官方文档说明其适用于以下数据类型:audio(音频)、image(图像)、HTML、paragraph(段落)、text(文本)、time series(时间序列)、video(视频)

基础用法与完整示例

最简单的基础配置如下(与 datetime.md 文档中的示例一致):

<View> <Text name="txt" value="$text" /> <DateTime name="datetime" toName="txt" only="date" /> </View>

<Text>标签提供了待标注的文本对象,<DateTime>通过toName="txt"关联该对象,only="date"表示界面只展示日期选择控件(不展示时间)。

仓库中还提供了一个更完整的实战示例 config.xml,同时覆盖了全局标注、必填校验、自定义格式以及按区域(perRegion)标注:

<View> <Header>Global date+time, required, stored as dd.mm.yyyy HH:MM</Header> <DateTime name="full" toName="text" required="true" min="2021-11-10" format="%d.%m.%Y %H:%M"/> <Header>Select text to see related smaller DateTime controls for every region</Header> <Labels name="label" toName="text"> <Label value="birth" background="green"/> <Label value="death" background="red"/> <Label value="event" background="orange"/> </Labels> <Text name="text" value="$text"/> <View visibleWhen="region-selected"> <Header>Date in this fragment, required, stored as ISO date</Header> <DateTime name="date" toName="text" perRegion="true" only="date" required="true" format="%Y-%m-%d"/> <Header>Year this happened, but stored also as ISO date</Header> <DateTime name="year" toName="text" perRegion="true" only="year" format="%Y-%m-%d"/> </View> </View>

该示例演示了三种典型的DateTime形态:完整日期+时间、仅日期、仅年份,并结合perRegion="true"visibleWhen="region-selected"实现"选中文本区域后才显示对应时间控件"的交互。

参数详解

DateTime支持以下参数(依据 datetime.md 与 includes/tags/datetime.md,方括号[]表示可选):

参数类型默认值说明
namestring元素名称,必填,作为标注结果中from_name的标识
toNamestring需要标注的目标元素名称,必填
onlystring逗号分隔的要展示的部分(date、time、month、year)。注意:date 不能与 month/year 同时使用,date 优先级更高
formatstring日期时间的输入/输出 strftime 格式(内部始终以 ISO 存储)。详见下文格式规则
[min]string最小日期时间值:only=date时用 ISO 格式,only=year时是最小年份
[max]string最大日期时间值:only=date时用 ISO 格式,only=year时是最大年份
[required]booleanfalse是否必填
[requiredMessage]string校验失败时展示的提示消息
[perRegion]boolean对区域(region)而非整个对象进行标注
[perItem]boolean对对象内部的条目(item)进行标注

only 参数的取值逻辑

only控制界面展示哪些时间部件,其判断逻辑在 DateTime.jsx 的视图(views)中实现:

  • only="date":仅展示日期输入框;
  • only="time":仅展示时间输入框(24 小时制、前导零格式,如14:05);
  • only="month,year":展示月份与年份两个下拉选择框(此时不再展示日期与时间输入框);
  • only="year":仅展示年份下拉选择框;
  • 不设置only:默认同时展示日期与时间。

源码中的判定视图如下:showDate在未设置only或包含"date"时为真;showMonth仅在包含"month"且不包含"date"时为真;showYear在包含"year"时为真。这印证了文档中"date 与 month/year 不可混用、date 优先"的规则——一旦包含date,月份选择即被隐藏。

format 参数的默认行为与规则

format使用 strftime 格式描述符(如%Y-%m-%d%H:%M%d.%m.%Y %H:%M)。文档与源码共同规定的默认行为如下:

  • 内部始终以 ISO 存储format仅决定界面上的输入/输出展示格式;
  • 同时展示日期和时间时,默认显示 ISO 格式并使用"T"作为分隔符,即%Y-%m-%dT%H:%M(源码常量FORMAT_FULL);
  • 仅展示日期时,默认显示 ISO 日期%Y-%m-%d(源码常量FORMAT_DATE);
  • 仅展示时间时,默认显示 24 小时制、带前导零的时间%H:%M(源码常量FORMAT_TIME)。

从 DateTime.jsx 的 volatile 状态初始化可以看到实际的格式选择逻辑:only=time时不做格式化(直接使用字符串);设置了format时以自定义格式为准;未显示时间时回退到FORMAT_DATE;否则使用FORMAT_FULL。底层通过d3.timeFormatd3.timeParse完成格式化与解析。

min / max 约束

  • only=date时,min/max使用 ISO 日期格式(如min="2021-11-10");
  • only=year时,min/max表示年份(如min="2000");
  • 当同时展示日期与时间时,时间部分也可从min/max中提取并应用到时间输入框的min/max属性(见 DateTime.jsx 中minTime/maxTime的正则提取逻辑)。

在月份/年份模式下,年份下拉框的范围正是由min/max推导的:源码中minYear默认取2000maxYear默认取当前年份,下拉选项从最大年份向下递减排列;月份的选项名使用d3.timeFormat("%B")生成完整的英文月份名。

required 与 requiredMessage

required="true"时,标注者必须填写日期时间才能提交标注。校验失败时默认弹出提示:DateTime "名称" is required.,可通过requiredMessage自定义提示文本。测试用例 DateTime.test.jsx 验证了requiredModal()会调用InfoModal.warning,且优先使用requiredMessage自定义文案。

perRegion 与 perItem

  • perRegion="true":将日期时间标注绑定到具体区域(如选中的文本片段、图像上的检测框),适合对同一对象内的多个区域分别记录时间,常与visibleWhen="region-selected"配合使用;
  • perItem:对对象内部的条目进行标注,其混入(mixin)由特性开关FF_LSDV_4583控制是否启用(见 DateTime.jsx 的模型组合部分)。

从源码看,DateTimeModelControlBaseClassificationBaseRequiredMixinReadOnlyControlMixinPerRegionMixinAnnotationMixin等组合而成,因此它同时具备分类控件的通用能力(必填校验、只读、区域标注)与日期时间特有的解析/格式化逻辑。

标注结果的数据格式

DateTime属于分类型控制标签,其标注结果以type: "datetime"写入 annotation result。集成测试数据 from-prediction.ts 给出了标准的结果结构示例:

{ "from_name": "datetime", "to_name": "text", "type": "datetime", "value": { "datetime": "2000-01-01T00:00:00.000Z" } }

要点:

  • value.datetime中存储的是格式化后的展示值(受format影响),而校验时使用 ISO 形式;
  • 源码中的getISODate(value)方法负责把结果中的格式化值重新转换为 ISO 日期用于min/max校验,且特意避免使用toISOString(),防止时区偏移导致日期跨天(代码注释明确说明"we can't use toISOString() because it may shift timezone and return different day");
  • validateValue()校验流程为:先交由父类校验必填性,再转换出 ISO 日期,分别与min/max比较,越界时弹出包含具体日期与边界值的警告框(如Date "2019-06-15" is not valid: min date is 2020-01-01.)。

底层实现与验证机制

组件结构

DateTime的实现位于 web/libs/editor/src/tags/control/DateTime.jsx,通过Registry.addTag("datetime", DateTimeModel, HtxDateTime)注册为可识别的标签类型。界面组件HtxDateTime按需渲染:

  • 月份下拉框(showMonth为真时),占位文本 "Month...";
  • 年份下拉框(showYear为真时),占位文本 "Year...";
  • 日期输入框(showDate为真时),类型为原生input[type="date"],并透传min/max
  • 时间输入框(showTime为真时),类型为input[type="time"],并从min/max中提取时间范围。

界面细节还包括:值为空且未聚焦时展示占位符;校验失败(isValid为 false)时输入框边框显示为红色;只读模式下输入框带readOnly属性并禁用变更事件。这些行为均有对应的单元测试覆盖(见 DateTime.test.jsx 的HtxDateTime view测试组)。

测试覆盖的行为契约

单元测试验证了以下关键行为,可作为配置时的行为预期参考:

  • 未设置only时,showDateshowTime均为 true(默认同时展示日期与时间);
  • only="time"showDate为 false、showTime为 true;
  • only="month,year"时展示月份与年份选择框且不展示日期;
  • setDateTime("2024-07-20T14:30")能正确解析出 day=20、month=7、year=2024、time="14:30";
  • 传入无法解析的值(如"garbage")时自动清空全部字段;
  • isValidvalidateValue均能正确判定日期是否落在min/max区间内,越界时弹出警告;
  • validDateFormat只接受形如YYYY-MM-DD且年份在 1000~9999 之间的合法日期,"2024-13-01"(13 月)与"99-01-01"(两位数年份)都会被判为非法。

常用配置组合速查

需求配置
仅选择日期(ISO 存储)<DateTime name="d" toName="text" only="date" />
日期+时间<DateTime name="dt" toName="text" />
仅选择时间<DateTime name="t" toName="text" only="time" />
选择月份与年份<DateTime name="my" toName="text" only="month,year" />
仅选择年份<DateTime name="y" toName="text" only="year" />
限定日期范围<DateTime name="d" toName="text" only="date" min="2020-01-01" max="2025-12-31" />
必填并自定义提示<DateTime name="d" toName="text" required="true" requiredMessage="请选择日期" />
自定义输出格式<DateTime name="dt" toName="text" format="%d.%m.%Y %H:%M" />
按区域标注<DateTime name="d" toName="text" perRegion="true" only="date" />

注意事项

  1. date 与 month/year 互斥only中不要同时包含datemonth/year,date 会覆盖 month/year 的展示。
  2. min/max 格式随 only 变化only=date时用完整 ISO 日期;only=year时仅用四位数年份;同时展示日期与时间时,min/max中的时间部分会被提取用于时间输入框的上下限。
  3. 存储与展示分离:结果中存的是格式化值,内部校验始终基于 ISO 日期,时区转换可能影响跨天判定,需要精确到天时建议配置format="%Y-%m-%d"
  4. readOnly 环境:处于只读/评审模式时,日期、时间、月份、年份控件均不可编辑,界面会保持只读状态。

延伸阅读

  • 标签完整文档:datetime.md、参数说明
  • 源码实现:DateTime.jsx
  • 单元测试:DateTime.test.jsx
  • 实战示例配置:config.xml
  • 结果格式参考:from-prediction.ts
  • 标注配置入门:get_started.md

【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 9:33:23

HDMI切换器选购避坑指南:从参数陷阱到品牌梯队一次说清

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 9:32:30

diagram-design:图谱即代码的工程化实践

1. 为什么“diagram-design”不是个工具名&#xff0c;而是一套需要重新理解的工程能力 最近在几个技术社区里反复看到这个词被当作搜索关键词刷屏&#xff1a; diagram-design 。它不像“React开发”或“Python爬虫”那样指向明确的技术栈&#xff0c;也不像“UI设计”那样有…

作者头像 李华
网站建设 2026/9/13 9:32:15

静态代码分析工具实战:从Cppcheck到SonarQube的选型与集成

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 9:30:22

Java+小程序协同过滤推荐系统实战指南

简介&#xff1a;本资源是一套完整的基于协同过滤算法的商品推荐系统实战源码&#xff0c;面向Java后端开发者与微信小程序全栈学习者&#xff0c;解决电商场景下个性化商品推荐与移动端购物闭环构建问题。压缩包共93个文件&#xff0c;总计13.25MB&#xff0c;涵盖Java后端逻辑…

作者头像 李华
网站建设 2026/9/13 9:29:47

2026年AI设计工具:多模型协同与智能编辑技术解析

1. 2026年AI设计工具市场现状与核心需求2026年的数字内容创作领域已经全面进入AI辅助时代&#xff0c;桌面高清壁纸设计作为视觉内容的重要分支&#xff0c;其生产方式发生了革命性变化。根据最新行业调研数据&#xff0c;超过78%的专业设计师已将AI工具纳入标准工作流&#xf…

作者头像 李华
网站建设 2026/9/13 9:29:04

人工合成地震波的反应谱匹配技术与工程应用

1. 项目背景与核心需求在结构工程和地震工程领域&#xff0c;人工合成地震波是评估建筑物抗震性能的关键工具。传统方法生成的地震波往往难以精确匹配目标反应谱&#xff0c;导致抗震分析结果出现偏差。这个项目正是为了解决这一行业痛点——开发能够精确符合规范反应谱的人工合…

作者头像 李华