Android将UTC日期时间字符串格式化为本地格式会抛出null错误

时间:2013-04-15 14:57:19

标签: android datetime

嗨我有下面的方法,它取一个UTC日期时间字符串的值,将其格式化为本地显示并返回:

public static String convertDateStringUTCToLocal(String sourceUtcDateTimeString)
{
    SimpleDateFormat simpleDataFormat = new SimpleDateFormat();
    simpleDataFormat.setTimeZone(getCurrentTimeZone());
    String outputUTCDateTimeString = simpleDataFormat.parse(sourceUtcDateTimeString, new ParsePosition(0)).toString();

    return outputUTCDateTimeString;
}

public static TimeZone getCurrentTimeZone()
{
    Calendar calendar = Calendar.getInstance();
    TimeZone outputTimeZone = calendar.getTimeZone();

    return outputTimeZone;
}

我使用getCurrentTimeZone(),因为用户可能随时更改其本地设置,我不想硬编码格式。

在调试时,参数sourceUtcDateTimeString的值为'Mon Apr 15 13:54:00 GMT 2013',我发现'simpleDataFormat.parse(sourceUtcDateTimeString,new ParsePosition(0))'给我'null',和' simpleDataFormat.parse(sourceUtcDateTimeString,new ParsePosition(0))。toString()'在toString()处抛出错误“java.lang.NullPointerException”。

看起来ParsePosition(0)没有任何内容,但我对Android开发人员来说真的很新,不知道为什么会发生这种情况以及如何解决它,任何人都可以帮忙解决问题吗?我被困在这个问题上几个小时。

提前感谢。

1 个答案:

答案 0 :(得分:1)

您尝试解析的字符串似乎来自Date的{​​{1}}方法,该方法的格式为toString()(请参阅the javadoc)。要将其解析回dow mon dd hh:mm:ss zzz yyyy,您可以使用已弃用的Date,也可以使用格式为Date parsed = new Date(Date.parse())的{​​{1}}(请参阅SimpleDateFormat Documentation)。

例如,此代码适用于我:

SimpleDateFormat

根据您的其他应用程序,您应该考虑将任何日期作为EEE MMM dd HH:mm:ss zzz yyyy实例传递,而不是使用public static String convertDateStringUTCToLocal(String sourceUtcDateTimeString) { SimpleDateFormat simpleDataFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); // SimpleDateFormat already uses the default time zone, no need to set it again String outputUTCDateTimeString = simpleDataFormat.parse(sourceUtcDateTimeString, new ParsePosition(0)).toString(); return outputUTCDateTimeString; } 。然后,只要您需要向用户显示日期,就可以应用正确的格式。