2

我有一个看起来像这样的类:

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 中是否有什么特别之处?

4

0 回答 0