我需要用SimpleDateFormat
解析data = "2013-12-09 12:14:09.994844+10"
的字符串值。
我正在使用format = "yyyy-MM-dd HH:mm:ss.SSSSSSZ"
,但它不起作用。
如何解决这个问题?
public class Test {
public static final String FORMAT1 = "hh:mm aa dd.MM.yyyy";
public static final String FORMAT2 = "yyyy-MM-dd HH:mm:ss.SSSSSSZ";
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Time = "
+ getDate("2013-12-09 12:14:09.994844+10",
DateTimeUtils.FORMAT2, DateTimeUtils.FORMAT1));
}
public static String getDate(String inputDate, String inputFormat,
String outputFormat) {
String strDate = "";
SimpleDateFormat sdfInput = new SimpleDateFormat(inputFormat,
Locale.getDefault());
SimpleDateFormat sdfOutput = new SimpleDateFormat(outputFormat,
Locale.getDefault());
if (inputDate != null) {
Date date;
try {
date = sdfInput.parse(inputDate);
strDate = sdfOutput.format(date);
} catch (ParseException e) {
strDate = "";
e.printStackTrace();
}
}
return strDate.toUpperCase();
}
}
在 Java SE 7 中,要用一个符号和两位数字格式化时区,请使用字母 'X'
。例如:"yyyy-MM-dd HH:mm:ss.SSSSSSX"
.javadoc 可以在这里找到。
但是,在Android中不支持字母'X'
,但是您可以在日期字符串中添加两个额外的零以使用'Z'
。例如:"2013-12-09 12:14:09.994844+1000"
将被正确解析。Android 版 javadoc 可以在这里找到。
SimpleDateFormat 无法处理微秒。您需要去掉多余的 3 位数字。喜欢这个:
data = data.substring(0, data.length()-4)+"Z";