简单日期格式,解析异常
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() 方法。
使用 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() 方法。