MaskedDateField
MaskedDateField 是一个用于结构化日期输入的文本输入控件。它允许用户以 数字 的形式输入日期,并在字段失去焦点时根据定义的掩码自动格式化输入。掩码是一个字符串,用于指定期望的日期格式,从而引导用户的输入和显示。
此组件支持灵活的解析、验证、本地化和值恢复。在注册、预订和调度等需要一致的、特定地区格式日期的表单中,它特别有用。
MaskedDateField 仅专注于 日期 值。如果您需要一个类似的组件来输入和格式化 时间,请查看 MaskedTimeField。
基础
MaskedDateField 可以在有或没有参数的情况下实例化。您可以定义初始值、标签、占位符和用于值更改的事件侦听器。
显示代码
- Java
掩码规则
MaskedDateField 支持全球使用的多种日期格式,这些格式根据日、月和年的顺序而有所不同。常见模式包括:
- 日/月/年(在大多数欧洲地区使用)
- 月/日/年(在美国使用)
- 年/月/日(在中国、日本和韩国使用;也是 ISO 标准:
YYYY-MM-DD)
在这些格式中,本地变体包括分隔符的选择(例如,-、/ 或 .)、年份是两位还是四位数字、以及单个位数的月份或日期是否用前导零填充。
为了处理这种多样性,MaskedDateField 使用格式指示符,每个指示符以 % 开头,后跟一个表示日期特定部分的字母。 这些指示符定义输入的解析方式和日期的显示方式。
日期格式指示符
| 格式 | 描述 |
|---|---|
%Y | 年 |
%M | 月 |
%D | 日 |
修饰符
修饰符允许更精准地控制日期组件的格式化:
| 修饰符 | 描述 |
|---|---|
z | 前零填充 |
s | 短文本表示 |
l | 长文本表示 |
p | 压缩数字 |
d | 十进制格式(默认格式) |
这些可以组合以构建多种日期掩码。
日期格式本地化
MaskedDateField 通过设置适当的区域设置来适应本地日期格式。这确保日期以符合用户期望的方式显示和解析。
| 地区 | 格式 | 示例 |
|---|---|---|
| 美国 | MM/DD/YYYY | 07/04/2023 |
| 欧洲 | DD/MM/YYYY | 04/07/2023 |
| ISO 标准 | YYYY-MM-DD | 2023-07-04 |
要应用本地化,请使用 setLocale() 方法。它接受一个 java.util.Locale,并自动调整格式和解析:
dateField.setLocale(Locale.FRANCE);
解析逻辑
MaskedDateField 根据定义的日期掩码解析用户输入。它同时接受完整和简略的数值输入,带或不带分隔符,允许灵活的输入,同时确保有效的日期。
解析行为取决于掩码定义的格式顺序(例如,%Mz/%Dz/%Yz 代表月/日/年)。该格式决定了数字序列的解释方式。
例如,假设今天是 2012年9月15日,以下是各种输入的解释方式:
示例解析场景
| 输入 | YMD (ISO) | MDY (US) | DMY (EU) |
|---|---|---|---|
1 | 一个数字始终被解释为当前月份内的日期数字,因此这将被解释为 2012年9月1日。 | 同 YMD | 同 YMD |
12 | 两个数字始终被解释为当前月份内的日期数字,因此这将被解释为 2012年9月12日。 | 同 YMD | 同 YMD |
112 | 三个数字被解释为一个位数的月份数字后跟两位数的日期数字,因此这将被解释为 2012年1月12日。 | 同 YMD | 三个数字被解释为一个位数的日期数字后跟两位数的月份数字,因此这将被解释为 2012年12月1日。 |
1004 | 四个数字被解释为 MMDD,因此这将被解释为 2012年10月4日。 | 同 YMD |