0

嗨,我有下面的方法,它采用 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()' 抛出错误“java.lang.NullPointerException at toString()”。

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

提前致谢。

4

1 回答 1

1

看起来您尝试解析的字符串来自 aDatetoString()方法,该方法提供了格式dow mon dd hh:mm:ss zzz yyyy(请参阅javadoc)。要将其解析回 aDate您可以使用Date parsed = new Date(Date.parse())已弃用的 ,或使用SimpleDateFormat带有格式的 a EEE MMM dd HH:mm:ss zzz yyyy(请参阅SimpleDateFormat 文档)。

例如,这段代码对我有用:

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;
}

根据您应用程序的其余部分,您应该考虑将任何日期作为Date实例传递,而不是使用String. 然后,您可以在需要向用户显示日期的任何时候简单地应用正确的格式。

于 2013-04-15T15:26:22.107 回答