时间格式本地化 Cluster(TimeFormatLocalization)
Cluster ID: 0x002C |
所在 Endpoint: Endpoint 0(Root) |
角色: Server(通过 Write 属性配置,无命令)
TimeFormatLocalization 控制设备上的时间和日期显示格式偏好。 它不负责时间本身的获取或同步(那是 TimeSynchronization Cluster 的工作), 而是决定设备在屏幕、面板等界面上怎么展示时间 —— 用 12 小时制还是 24 小时制,用公历还是其他日历。
这个 Cluster 非常精简 —— 最少只有 1 个属性(HourFormat), 支持 CALFMT Feature 时再增加 2 个日历相关属性。没有任何命令,所有配置都通过直接写属性完成。
用户拿到一台带屏幕的智能设备(恒温器、智能面板、带显示的门锁),
发现上面的时间显示是 12 小时制,想改成 24 小时制?写一下 HourFormat 就行。
需要在设备屏幕上显示农历日期?先确认设备支持 CALFMT Feature,然后写 ActiveCalendarType。
Feature 位图
TimeFormatLocalization 通过 FeatureMap(0xFFFC)声明设备是否支持日历格式配置:
HourFormat 是必须支持的,与 Feature 无关。
只有当设备声明了 CALFMT Feature 时,ActiveCalendarType 和
SupportedCalendarTypes 才可用。
简单的设备(如只有时钟显示的插座)通常不支持 CALFMT,只有 HourFormat 一个属性。
属性总览
TimeFormatLocalization 最多有 3 个属性,其中 2 个依赖 CALFMT Feature。点击属性 ID 可跳转到详细说明。
| ID | 名称 | 类型 | 读写 | Feature | 说明 |
|---|---|---|---|---|---|
0x00 |
HourFormat | enum8 | 读写 | - | 时间显示格式(12/24 小时制) |
0x01 |
ActiveCalendarType | enum8 | 读写 | CALFMT | 当前使用的日历类型 |
0x02 |
SupportedCalendarTypes | list<enum8> | 只读 | CALFMT | 设备支持的所有日历类型列表 |
HourFormat(时间显示格式)
控制设备以 12 小时制还是 24 小时制显示时间。这是 TimeFormatLocalization 唯一的必须属性, 所有支持此 Cluster 的设备都必须实现。可读可写,直接写属性即可切换。
HourFormatEnum 枚举值
当 HourFormat 设为 0xFF(UseActiveLocale)时,设备会根据
LocalizationConfiguration Cluster 中的 ActiveLocale 属性自动选择时间格式。
例如 en-US 自动使用 12 小时制,zh-CN 自动使用 24 小时制。
这是最省心的选择,让设备自己跟随语言设置。
写属性示例(切换为 12 小时制):
// App → Device:将时间显示切换为 12 小时制
{
"writeRequests": [{
"attributePath": {
"endpointId": 0,
"clusterId": "0x002C",
"attributeId": "0x00" // HourFormat
},
"data": 0 // 12hr
}]
}
ActiveCalendarType(当前日历类型)
控制设备使用哪种日历系统来显示日期。可读可写,但只能写入 SupportedCalendarTypes 列表中包含的值。
需要设备支持 CALFMT Feature,否则此属性不存在。
CalendarTypeEnum 枚举值
不是所有设备都支持全部 12 种日历。写入 ActiveCalendarType 之前,
必须先读取 SupportedCalendarTypes 确认目标日历在列表中。
写入不支持的值会被设备拒绝(返回 CONSTRAINT_ERROR)。
写属性示例(切换为中国农历):
// App → Device:将日历切换为中国农历
{
"writeRequests": [{
"attributePath": {
"endpointId": 0,
"clusterId": "0x002C",
"attributeId": "0x01" // ActiveCalendarType
},
"data": 1 // Chinese(中国农历)
}]
}
SupportedCalendarTypes(支持的日历列表)
只读属性,返回设备支持的所有日历类型列表。列表中的每个元素都是 CalendarTypeEnum 的一个值。
App 应该用这个列表来构建日历选择的 UI —— 只展示设备实际支持的选项。
需要设备支持 CALFMT Feature。
读取 SupportedCalendarTypes 后,用它动态生成设置页面的日历选项列表。
大多数设备只会支持 Gregorian(公历)和当地常用的一两种日历,
不要硬编码全部 12 种。如果列表里只有一项,可以考虑隐藏日历切换入口。
示例数据
读取一台支持 CALFMT Feature 的智能恒温器的 TimeFormatLocalization 属性:
{
// --- 时间格式 ---
"0x00": 1, // HourFormat = 24hr(24 小时制)
// --- 日历格式(需 CALFMT Feature)---
"0x01": 4, // ActiveCalendarType = Gregorian(公历)
"0x02": [4, 0, 1] // SupportedCalendarTypes = [Gregorian, Buddhist, Chinese]
}
常见场景
场景 1:恒温器时间格式设置
用户新装了一台智能恒温器,屏幕上显示的是 12 小时制(如 2:30 PM), 习惯 24 小时制的用户希望通过 App 切换显示格式。
- 读取
HourFormat确认当前值为0(12hr) - App 设置页展示三个选项:12 小时制、24 小时制、跟随系统语言
- 用户选择 24 小时制,App 写入
HourFormat = 1(24hr) - 设备屏幕立即从「2:30 PM」变为「14:30」
- 如果设备支持 CALFMT,同一设置页还可以展示日历切换选项
场景 2:多地区智能面板的日历本地化
一款面向全球市场的智能家居面板,主屏幕显示日期和时间。 不同地区的用户需要看到不同的日历格式 —— 中国用户想看农历,中东用户想看伊斯兰历。
- 读取
FeatureMap确认设备支持 CALFMT(Bit 0 = 1) - 读取
SupportedCalendarTypes,假设返回[4, 1, 7](公历、农历、伊斯兰历) - App 设置页根据列表动态生成选项,附上本地化名称:「公历」「农历」「伊斯兰历」
- 中国用户选择农历,App 写入
ActiveCalendarType = 1(Chinese) - 面板屏幕日期区域从「2024-09-22」变为同时显示「甲辰年八月二十」
- 也可以设为
UseActiveLocale (0xFF),让面板根据语言设置自动选择合适的日历