我在我的项目中使用了Spring,属性文件如下所示。
reportPRM.field=\
TrxDateTime |6 |yyMMdd;\
TrxDateTime |6 |HHmmss;\
MerchantID |16 |Space;\
我有一个包含多行的属性。用户可以更改TrxDateTime的日期格式模式。我需要验证模式的正确性。该怎么做呢?
我已经尝试了下面的代码。
public static boolean validatePattern(String template) {
try {
new SimpleDateFormat(template);
return true;
} catch (IllegalArgumentException e) {
logger.error(ThrowableHelper.getMessage(e));
}
return false;
}
但事实证明,对于输入"0“,它会给出true。
编辑。增加了单元测试。
@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.这是完整的属性。
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
。
发布于 2019-02-28 15:52:06
如果您查看format symbols,您可能只想提供一个子集-太多可能出错-而不被检测到。
太多的模式对于日期时间格式化程序是可接受的。
这意味着一些措施/努力:
H116使用您的自定义模式;例如,.xlsx .xlsx模式,并将其转换为java模式。<代码>H217<代码>F218
https://stackoverflow.com/questions/54918156
复制相似问题