【问题标题】:Unparseable Date Exception SimpleDateFormat for Hmm formatHmm 格式的不可解析日期异常 SimpleDateFormat
【发布时间】:2020-10-11 08:53:06
【问题描述】:

在验证给定字符串时,文本是 Hmm 格式得到这个错误

java.text.ParseException:无法解析的日期:“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
         }
    }

这是为了验证上传文件中的给定列。所以根据配置中为每列编写的格式将其写成动态的。

【问题讨论】:

  • 好吧,你不应该使用DateSimpleDateFormat,因为它们已经过时而且很麻烦。你知道为什么? Here it is。请改用 java.time 包中的类。
  • 我建议你不要使用SimpleDateFormatDate。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time APILocalTimeDateTimeFormatter

标签: java simpledateformat datetime-format date-format time-format


【解决方案1】:

嗯,它应该工作。

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

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

【讨论】:

  • 很好的链接!谢谢。
【解决方案2】:

这是因为SimpleDateFormat 无法使用您给定的格式解析给定的日期。

让我们明白 - 你的格式是 Hmm 并且你已经给了日期 747 然后,当然在解析过程中,日期的第一个字母 7 映射到格式的第一个字母“H”即小时和47 映射到mm 即分钟,因此它能够正确转换但对于下一个日期1637 它失败了,因为它不知道分配给H 的哪个字母。

这里有一些选项,您可以尝试使其更通用,选择诸如HHmm 之类的格式并始终给出长度为 4 的日期,例如对于747,输入为0747,它应该可以工作。

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

【讨论】:

    猜你喜欢
    • 2019-12-04
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多