有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Hmm格式的java不可解析日期异常SimpleDataFormat

验证给定字符串文本是否为Hmm格式时出现此错误

java.text.ParseException: Unparseable date: "1637"

但这对文本“747”有效

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

    public class Validation{
    
         public void validateDateFormat(String format,String text){
              SimpleDateFormat sdfrmt = new SimpleDateFormat(format);
              sdfrmt.setLenient(false);
              Date testDate = null;
              try {
                    testDate = sdfrmt.parse(text);
    
              } catch (ParseException e) {
                    System.out.println("dateFormat Exception :");
                    e.printStackTrace();
            }
         }
         
         public static void main(String []args){
            Validation val = new Validation();
            val.validateDateFormat("Hmm","747"); //working 
            val.validateDateFormat("Hmm","1637");//not working
         }
    }

这用于验证上载文件中的给定列。因此,根据在配置中为每列编写的格式,将其编写为动态的


共 (2) 个答案

  1. # 1 楼答案

    嗯,它应该能起作用

    但是您应该使用java.time包中提供的更新的Java日期和时间API(JSR 310)

    如果然后用LocalTime替换Date,用DateTimeFormatter替换SimpleDateFormat(使用ofPattern工厂方法),用DateTimeParseExceptionit'll work替换ParseException

  2. # 2 楼答案

    发生这种情况是因为SimpleDateFormat无法使用您给定的格式解析给定的日期

    让我们理解一下——你的格式是Hmm,你把日期定为747,当然,在解析过程中,日期的第一个字母7被映射到格式的第一个字母“H”,即小时,而47被映射到mm即分钟,因此它能够正确转换,但对于下一个日期1637,它失败了,因为它不知道分配给H

    以下是一些选项,您可以尝试使其更通用,选择格式,如HHmm,并始终给出长度为4的日期,例如747输入为0747,它应该可以工作

    或者选择一种更清晰的格式供解析器映射,例如,您可以选择格式为H:mm,输入为7:4716:37。因为在小时和分钟之间有一个分隔符:,解析器将能够解析所有类型的时间,而不管给定输入的长度是3还是4