首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何验证正确的日期格式模式?格式化模式,而不是字符串中的日期

如何验证正确的日期格式模式?格式化模式,而不是字符串中的日期
EN

Stack Overflow用户
提问于 2019-02-28 11:55:26
回答 1查看 240关注 0票数 2

我在我的项目中使用了Spring,属性文件如下所示。

代码语言:javascript
复制
reportPRM.field=\
TrxDateTime   |6    |yyMMdd;\
TrxDateTime   |6    |HHmmss;\
MerchantID    |16   |Space;\

我有一个包含多行的属性。用户可以更改TrxDateTime的日期格式模式。我需要验证模式的正确性。该怎么做呢?

我已经尝试了下面的代码。

代码语言:javascript
复制
public static boolean validatePattern(String template) {
    try {
        new SimpleDateFormat(template);

        return true;
    } catch (IllegalArgumentException e) {
        logger.error(ThrowableHelper.getMessage(e));
    }

    return false;
}

但事实证明,对于输入"0“,它会给出true。

编辑。增加了单元测试。

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
@TestPropertySource(properties = "scheduler.enable=false")
public class DateFormatTest {

    @Test
    public void testDateFormat() {
        assertTrue(StringHelper.validatePattern("0"));
        assertTrue(StringHelper.validatePattern("abcde"));

        assertTrue(StringHelper.validatePattern("yyyyMMdd"));
        assertTrue(StringHelper.validatePattern("HHmmss"));
    }

}

对于输入"0","yyyyMMdd","HHmmss“返回true,对于"abcde”,返回false。但我认为这还不够。日期格式模式必须符合一般标准模式。

编辑2.这是完整的属性。

代码语言:javascript
复制
reportPRM.field=\
TrxDateTime                                     |6  |yyMMdd;\
TrxDateTime                                     |6  |HHmmss;\
MerchantID                                      |16 |Space;\
CompanyName                                     |25 |Space;\
                                                |2  |ID;\
CardNo                                          |19 |0;\
                                                |4  |CPAY;\
Amount                                          |15 |0;\
{P: RespDesc, R: RespDescReversal}              |6  |0;\
{P: DSPRetCodePayment, R: DSPRetCodeReversal}   |3  |0;

我需要遍历每一行,并检查第3列中的值是否为日期格式的模式。但是上面的函数给出了"0“的true

EN

回答 1

Stack Overflow用户

发布于 2019-02-28 15:52:06

如果您查看format symbols,您可能只想提供一个子集-太多可能出错-而不被检测到。

  • HH = 24小时,hh = 12小时(PM不同)
  • yyyy=年。YYYY = week year (当周重叠两年时有所不同)

太多的模式对于日期时间格式化程序是可接受的。

这意味着一些措施/努力:

  • 理想情况下提供图形用户界面来创建模式(即具有12 |24小时的组合框)。
  • 提供小抄。
  • 允许某些模式,hh仅在后面跟着(AM/PM);提供热线电子邮件。
  • 有一份模式白名单。

H116使用您的自定义模式;例如,.xlsx .xlsx模式,并将其转换为java模式。<代码>H217<代码>F218

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54918156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档