错误解析时间戳
因此,我正在修改开放源代码Google I/O开源应用程序(2010)之一,尝试使用自定义Google电子表格同步应用程序时出现以下错误,同一标题不同的数据(出现同步精细与默认谷歌电子表格)错误解析时间戳
“同步错误:问题解析时间戳:java.text.ParseException:无法解析的日期:‘空2010 10:45 AM -0700’
这是的投掷Java代码错误
private static long parseTime(String date, String time) throws HandlerException {
final String composed = String.format("%s 2010 %s -0700", date, time);
try {
return sTimeFormat.parse(composed).getTime();
} catch (java.text.ParseException e) {
throw new HandlerException("Problem parsing timestamp", e);
}
}
这里是链接s到它试图解析信息(凌动): 我的数据 https://spreadsheets.google.com/feeds/worksheets/0AmvmSNjQXtJFdE1lTlFxVXZCLUN0OFpqa3oyM2d4bEE/public/basic
谷歌数据 http://spreadsheets.google.com/feeds/worksheets/twd6syM493oFqIFWeIm8qGw/public/basic“
我想不通为什么我得到这个错误。任何帮助将不胜感激。
检查您传入此方法的参数日期。它似乎是null
,这显然不是一个有效的日期。
这怎么可以一起工作时间长等特点:
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, dp.getDayOfMonth());
c.set(Calendar.MONTH, dp.getMonth());;
c.set(Calendar.YEAR, dp.getYear());
long l = c.getTime().getTime();
-1 - 虽然这是真的,但在这里看起来并不相关。此外,如果'dp'是一个日期,那么您正在使用已弃用(或应该)的方法。 – 2012-03-14 15:42:04
因为@henrik已经发布您的实际目前的问题是什么,我给基于您发布代码的一些建议:
- 您正在使用
sTimeFormat
,它必须至少有一个static
变量,并且可能也是final
(通常应该在此上下文中)。但是,您并未遵循命名约定 - 应该将其命名为TIMESTAMP_FORMATTER
(如果您唯一要做的是获取实际日期,请使用TIMESTAMP_PARSER
)。此外,尽管您不太可能在Android设备上使用多个线程,但请注意DateFormat
和SimpleDateFormat
是不是线程安全 - 标准做法是为每个用途构建一个副本。 - 在尝试解析它之前,您正在手动设置时间戳本身的格式。没有意义 - 你应该使用现有的数据(直接来自xml,或者呈现的html),并提供一个自定义的格式化字符串。
- 您正在设置日期,年份和时区的两个部分。至少应该将其移到实际的分析部分之外。您应该编写一个
setToCanonicalDate
方法,或者将解析后的输出结果设置为有效的年份和时区。你分发这个应用有多远?我住在太平洋时区 - 你的默认对我没有任何好处。
这是我第一次想到,应用程序读入的日期列中,但没有一个是空的。 – user1113888 2012-03-14 16:35:52