时间格式应该为dd,MMM,yyyy,hh,mm。

3

你好,我正在发送JSON数据,需要在后端验证JSON。时间格式应为:dd,MMM,yyyy,hh,mm

这是我的JSON:

{
    "equipmentID":"234",
    "modality":"healthcaare",
    "facilityID":"manipal",
    "countryCode":"abc",
    "isoCode":"1234",
     "problemType":"234",
    "problemArea":"priyanka",
    "equipmentStatus":"sdsd",
    "name":"taneja",
    "phoneNumber":"13333344",
    "extension":"12123",
    "description":"x ray machine error",
    "shortDescription":"2",
     "timePeriod":"03-12-2011 04-37",
     "serviceCode":"sdfdf",
     "locale":"werfd",
    "requestingApp":"icenter", 
    "examNumber":"sdd", 
    "seriesNumber":"dfdf", 
    "imageNumber":"dfdfd"
}

这是一个验证类 public class RequestValidator implements Validator {
    @Override
    public ValidationResult validate(String objectName, RequestData rqdata) {
        // TODO Auto-generated method stub

        ValidationResult result = new ValidationResult();

        if (rqdata == null) {
            result.addError("error.invalidObjectGraph", "Object graph not initialized correctly");
            return result;
        }
        Validation.rule("EquipmentId", rqdata.getEquipmentID()).required().run(result);
        Validation.rule("Modality", rqdata.getModality()).required().run(result);
        Validation.rule("FacilityID", rqdata.getFacilityID()).required().run(result);
        Validation.rule("CountryCode", rqdata.getCountryCode()).required().maxLength(3).matches("^[a-zA-Z]*$")
                .run(result);
        Validation.rule("ProblemType", rqdata.getProblemType()).required().run(result);
        Validation.rule("Name", rqdata.getName()).required().maxLength(20).run(result);
        Validation.rule("PhoneNumber", rqdata.getPhoneNumber()).required().maxLength(25).matches("[0-9]+").run(result);
        Validation.rule("Extension", rqdata.getExtension()).required().maxLength(10).matches("[0-9]+").run(result);
        Validation.rule("Description", rqdata.getDescription()).required().maxLength(300).run(result);
        Validation.rule("ShortDescription", rqdata.getShortDescription()).required().maxLength(80).run(result);
        Validation.rule("TimePeriod", rqdata.getTimePeriod()).required().matches("dd-MMM-yyyy hh-mm").run(result);
        Validation.rule("Locale", rqdata.getLocale()).required().run(result);

        System.out.println("value of requesting app is:" + rqdata.getRequestingApp());
        Validation.rule("RequestingApp", rqdata.getRequestingApp()).required().matches("icenter").run(result);
        System.out.println(result.getErrorDetails());
        return result;
    }
}

但我遇到了一个错误,提示日期格式不正确。请帮我解决一下。谢谢。

1
你的问题中提到格式应该是 dd,MMM,yyyy,hh,mm,但是你的代码检查的是 dd-MMM-yyyy hh-mm。应该使用哪个格式?另外请注意,MMM 是月份的文本名称,不易国际化。我的同事会将今天的月份缩写为 "Mär"。建议使用 ISO 8601 标准,因为它是 a) 标准;b) 易于理解;c) 易于排序(格式为 "yyyy-MM-dd hh:mm" 或 "yyyy-MM-ddThh:mm")。此外,请不要忘记时区。我建议在数据库中存储 UTC。 - Martin Bonner supports Monica
当你使用JSON时,应该像其他人一样将日期转换为RFC 3339格式的字符串(几乎与ISO 8601完全相同,但要求更严格;不同于8601,秒数也是必需的)。 - gnasher729
我也尝试了这个,但还是不起作用。字符串正则表达式为"^(([0-9])|([0-2][0-9])|([3][0-1]))-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{4}$"。Validation.rule("TimePeriod", rqdata.getTimePeriod()).required().matches(regEx).run(result); - priyanka
1个回答

0

匹配需要在其中使用正则表达式。

试试这个

^(([0-9])|([0-2][0-9])|([3][0-1]))\-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\-\d{4}$

这可以用来检查月份是否符合MMM的格式

Time 是其中一个参数,有不同的方式。请考虑使用日期的时代格式进行数据交换。这将是更好的选择。

[编辑]

更改此内容

Validation.rule("TimePeriod", rqdata.getTimePeriod()).required().matches("dd-MMM-yyyy hh-mm").run(result);

String regEx = "^(([0-9])|([0-2][0-9])|([3][0-1]))\-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\-\d{4}$";
Validation.rule("TimePeriod", rqdata.getTimePeriod()).required().matches(regEx).run(result);

我已经尝试过了,但仍然无法正常工作。还有其他解决方案吗? - priyanka
rqdata.getTimePeriod() 的类型是什么? - Vinay Veluri
字符串是返回类型。 - priyanka
无效格式,我正在尝试以下内容:String regEx = "^(([0-9])|([0-2][0-9])|([3][0-1]))-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-d{4}$";在JSON中:"timePeriod":"03-JAN-1992"。 - priyanka
我正在使用以下字符串正则表达式: "^[0-3]?[0-9]/[0-3]?[0-9]/(?:[0-9]{2})?[0-9]{2}$",并且JSON值为"timePeriod":"01/01/2011",这个正则表达式可以工作,但是我想添加时间hh:mm,那么正则表达式应该怎么写呢? - priyanka
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接