我正在从服务器解析JSON,并在其中使用一些类似但日期不同的格式,有些看起来像:
2013-12-13T09:59:59Z
我可以使用
解析SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
而其他人看起来像
2013/11/14 11:00:14 -0500
我可以使用
解析SimpleDateFormat("yyyy/MM/dd HH:mm:ss ZZZ")
有更通用的方法吗?如果有一个标准方法服务器端显然会更好,但我无法改变它。
答案 0 :(得分:0)
如果您只有两种格式的变体,则可以使用以下代码:
SimpleDateFormat iso = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX");
SimpleDateFormat other = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss XX");
String input = "2013/11/14 11:00:14 -0500";
Date result;
if (input.indexOf('/') != -1) { // or: input.charAt(4) == '/'
result = other.parse(input);
} else {
result = iso.parse(input);
}
注意:对于Android,您必须使用ZZ而不是XX,但我不确定Android上的ZZ是否可以正确解析ISO输入中的Z符号。如果有疑问(测试!),您有另一种格式变体,您必须以特定方式处理(使用类似input.endsWith("Z")
的内容)。
答案 1 :(得分:0)
你可以用它。 你的日期格式不应该是暧昧的,例如" 07/08/2013"可以是" dd / MM / YYYY"或" MM / dd / YYYY"。
private static Date parseDate(String dateString, DateFormat... dateFormats)
{
Date date = null;
for (DateFormat df : dateFormats)
{
try
{
date = df.parse(dateString);
break;
}
catch (ParseException e)
{
// Ignore. Try next date format
}
}
return date;
}
答案 2 :(得分:0)
我觉得最好保留可能出现在数组中的所有日期格式,然后通过使用foreach循环,您可以检查哪种格式最适合,并且您可以通过这种方式解析它。 我使用以下代码来实现它,
public static String postedTimeFormat(String inPostedTime) {
String[] formats = {
"EEE MMM dd HH:mm:ss Z yyyy", "yyyy-MM-dd'T'HH:mm:ss",
"yyyy-MM-dd'T'HH:mm:ss'Z'", "yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "yyyy-MM-dd'T'HH:mm:ss.SSSZ",
"yyyy-MM-dd HH:mm:ss", "MM/dd/yyyy HH:mm:ss",
"MM/dd/yyyy'T'HH:mm:ss.SSS'Z'", "MM/dd/yyyy'T'HH:mm:ss.SSSZ",
"MM/dd/yyyy'T'HH:mm:ss.SSS", "MM/dd/yyyy'T'HH:mm:ssZ",
"MM/dd/yyyy'T'HH:mm:ss", "yyyy:MM:dd HH:mm:ss",
"yyyyMMdd", "yyyy-MM-dd" ,
"yyyy-MM-dd HH:mm", "yyyy-MM-dd HH:mmZ",
"yyyy-MM-dd HH:mm:ss.SSSZ"};
if (inPostedTime != null) {
for (String format : formats) {
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US);
try {
sdf.parse(inPostedTime);
return format;
} catch (ParseException e) {
}
}
}
return null;
}
答案 3 :(得分:0)
通过执行此类操作,将日期标准化为一种格式。
/
个字符替换为-
。T
。完成后,您应该能够使用
解析生成的字符串"yyyy-MM-dd'T'HH:mm:ssX"
如果您在Android代码中执行此操作,则还需要一个步骤:
你需要用
进行解析"yyyy-MM-dd'T'HH:mm:ssZ"