简单日期格式,解析异常

Simple Date Format, Parsing Exception

使用 Android Studio

我正在从 Facebook 检索日期,它是一个字符串“2015-11-21T17:49:49+0000

我想把它变成一个格式为“EEE MMM dd HH:mm:ss Z yyyy”的日期,当然我需要先把它变成一个日期对象

尝试这样做时,我试图将其解析为“EEE-MM-dd'T'HH:mm:ssZyyyy”,但这会导致我的程序碰撞。 "ParseException: Unparseable date: "2015-11-21T17:49:49+0000"(偏移量为 0)"

难道是日期后面带的T符号?还是我使用的格式不正确?

您的输入格式需要 yyyy(而不是 EEE)。像,

String in = "2015-11-21T17:49:49+0000";
String fmtIn = "yyyy-MM-dd'T'HH:mm:ssZ";
String fmtOut = "EEE MMM dd HH:mm:ss Z yyyy";
DateFormat sdf = new SimpleDateFormat(fmtIn);
try {
    Date d = sdf.parse(in);
    DateFormat outSDF = new SimpleDateFormat(fmtOut);
    System.out.println(outSDF.format(d));
} catch (ParseException e) {
    e.printStackTrace();
}

输出(因为我在美国东部时间)是

Sat Nov 21 12:49:49 -0500 2015

您也可以使用 GregorianCalendar. 虽然它们需要更长的时间来定义,但更易于管理。

GregorianCalendar calendar = new GregorianCalendar();

int year, month, day, hour, minute, second;

//...parse the data and store year, month, day, hour, minute, and second.
//...
//...

//fill in calendar's data.
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1); //month is offset by one (January == 0)
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.HOUR, hour); //No need to edit. 12AM is 0, 1AM is 1, 12PM is 12, etc.
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);

//get time in milliseconds since epoch and create Date object.
Date date = new Date(calendar.getTimeInMillis());

您可以使用 JodaTime 作为外部库。一旦这个库在你的类路径中,你所要做的就是写这样的东西:

DateTime myDate = new DateTime("2015-11-21T17:49:49+0000");

然后您可以将其转换为 Date 对象,调用 myDate 上的 toDate() 方法。