嗨我有下面的方法,它取一个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开发人员来说真的很新,不知道为什么会发生这种情况以及如何解决它,任何人都可以帮忙解决问题吗?我被困在这个问题上几个小时。
提前感谢。
答案 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;
}
。然后,只要您需要向用户显示日期,就可以应用正确的格式。