java - 如何解析SimpleDateFormat中的日期格式

标签 java

EEE MMM dd HH:mm:ss t yyyy

在解析这个日期格式时,我有

        java.lang.IllegalArgumentException: Illegal pattern character 't'
        at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:845)
        at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:659)
        at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:585)
        at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:560)
        at centina.sa.client.session.User.getUserDateTimeFormat(User.java:290)
        at centina.sa.client.session.User.getUserDateTimeFormatPattern(User.java:284)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
        at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32)
        at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
        at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28)
        at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
        at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:77)

为了避免这种情况,我想之前解析格式,如果它有效我想使用相同的 或者一些默认模式

 public SimpleDateFormat testFormat( )
    {
    String format = "EEE MMM dd HH:mm:ss t yyyy";
     String default_format = "EEE MMM dd HH:mm:ss z yyyy";
    if(format is valid)
    {
     return format;
    }
    else
    {
     return default_format;
    }
    }

    SimpleDateFormat DATE_FORMAT = testFormat();
    public void testDate(DATE_FORMAT)
    {
     String date = DATE_FORMAT.format("some date");
    }

如何测试格式是否有效,我将在另一个方法中格式化日期,所以在这个方法中我想解析格式

最佳答案

你可以按照这个方法尝试一下。如果您的日期 String 无法以给定格式解析,将抛出一个 ParseException,然后捕获 ParseException 并尝试使用其他格式。

String format = "EEE MMM dd HH:mm:ss t yyyy";  
String default_format = "EEE MMM dd HH:mm:ss z yyyy";
Date date=null;
try{
 date=new SimpleDateFormat(format).parse("some day"); 
}catch (ParseException|IllegalArgumentException e){
  try {
   date=new SimpleDateFormat(default_format).parse("some day");
  } catch (ParseException|IllegalArgumentException e1) {
        // Invalid date format 
  }     
}

但是您应该使用正确的日期格式,否则您将收到 IllegalArgumentException 因为模式错误。

您也可以验证日期格式。只需捕获 IllegalArgumentException 即可。

您可以从 here 找到有关日期格式化程序的所有信息.

关于java - 如何解析SimpleDateFormat中的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31957768/

相关文章:

java - 检测首次运行

java - BouncyCaSTLe Java - 解码 DER 编码的 OCTET 字符串

java - Spring , hibernate : failed to lazily initialize a collection

Java : call an API 200 times in parallel with no return expected

java - 如何使用 drawElements 和索引数组使用 OpenGL ES 渲染四边形?

java - 如何在hadoop中指定数据节点端口

java - 如何将oracle数据库中的值汇总到java中?

java - 使用 JAVA 项目或 AEM 实现 Akamai CCU V3 快速清除

java - 不显示二值图像

java - 如何使用java和hibernate在Oracle中存储几何点?