java:无法解析的日期异常

时间:2012-02-10 06:46:44

标签: java

我有这个值,

  

2011-11-19T00:00:00.000-03:00

需要转换并以此格式设置

  

YYYYMMDD

我试过这种方式

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

public class ParsedDate {

    public static void main(String args[]) throws ParseException {
        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ",
                Locale.US);
        String s1 = "2011-11-19T00:00:00.000-03:00";
        Date d = sdf.parse(s1);
        String s2 = (new SimpleDateFormat("yyyyMMdd")).format(d);
        System.out.println(s2);

    }
}

但是它给了我

线程中的异常“main”java.text.ParseException:无法解析的日期:“2011-11-19T00:00:00.000-03:00”

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:3)

尝试使用此

 DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS",
                    Locale.US);
            String s1 = "2011-11-19T00:00:00.000-03:00";
            Date d;
            try
            {
                d = sdf.parse(s1);
                String s2 = (new SimpleDateFormat("yyyyMMdd")).format(d);
                System.out.println(s2);
            }
            catch (ParseException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

请注意,我已删除 Z

答案 1 :(得分:0)

TL;博士

OffsetDateTime.parse( "2011-11-19T00:00:00.000-03:00" )
.format(
    DateTimeFormatter.BASIC_ISO_DATE
)
  

20111119

java.time

现代方法使用 java.time 类。

将您的输入解析为OffsetDateTime对象。

String input = "2011-11-19T00:00:00.000-03:00" ;
OffsetDateTime odt = OffsetDateTime.parse( input ) ;

提取仅限日期的关注值,没有时间和没有时区。

LocalDate ld = odt.toLocalDate() ;

DateTimeFormatter类提供了一个预定义的对象,其格式为BASIC_ISO_DATE。这种特殊格式在官方称为标准ISO 8601格式的“基本”变体,其中基本'意味着最大限度地减少分隔符的使用。

String output = ld.format( DateTimeFormatter.BASIC_ISO_DATE ) ;
  

20111119

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore