我有一个看起来像这样的类:
public class DateUtil {
private final static SimpleDateFormat origDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
private final static SimpleDateFormat reformatedDateFormat = new SimpleDateFormat("EEE., dd. MMM yyyy", Locale.GERMAN);
private final static String TAG = DateUtil.class.getSimpleName();
public static String reformatDateString(String origDateString) {
String reformattedDateString = origDateString;
try {
Date parsedDate = origDateFormat.parse(origDateString);
reformattedDateString = reformatedDateFormat.format(parsedDate);
}
catch (ParseException e) {
//if we can't parse the date, we don't change the format
Log.i(TAG, "Parse exception: " + e.getMessage());
}
return reformattedDateString;
}
public static boolean isBeforeCurrentDate(String dateString) throws ParseException {
Date parsedDate = origDateFormat.parse(dateString);
if (parsedDate.before(new Date(System.currentTimeMillis()))) {
return true;
}
return false;
}
}
...及其相应的 JUnit 测试:
public class DateUtilTest {
@Test
public void formatCorrectString() {
String dateString = "Mon Sep 03 00:00:00 CEST 2007";
String expectedResult = "Mo., 03. Sep 2007";
String resultString = DateUtil.reformatDateString(dateString);
assertEquals(expectedResult, resultString);
}
@Test
public void testBeforeCurrentDate() throws ParseException {
String dateString = "Mon Sep 03 00:00:00 CEST 2007";
assertTrue(DateUtil.isBeforeCurrentDate(dateString));
}
}
这行得通。但是在我的 Android 应用程序上,我总是得到一个 ParseException ,它的日期字符串相同Mon Sep 03 00:00:00 CEST 2007。有什么想法吗?
[更新]
我想出了问题所在。它是传递字符串的时区。如果我删除 DateFormat 中的“z”并从传递的日期字符串中删除时区,它可以在 Android 中使用:
String dateString = zone.getEffectiveFrom().trim().replace("CEST", "").replace("GMT", "").replace("CET", "").replace("MESZ", "");
SimpleDateFormat:EEE MMM dd HH:mm:ss yyyy
传递的字符串:Mon Sep 03 00:00:00 2007
这只是一种解决方法,没有解决方案,尽管我可以忍受,因为我不需要日期字符串的时间,所以对我来说没关系。但我想知道这是否是一个错误,或者 Android 中是否有什么特别之处?