所以我正在修改其中一个开源Google I / O开源应用程序(2010),当我尝试使用自定义Google电子表格同步应用程序时出现以下错误,相同的标题不同数据(似乎同步正常)使用默认的Google电子表格)
“同步错误:解析时间戳的问题:java.text.ParseException:Unparseable date:”null 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);
}
}
这是它试图解析的信息(Atom)的链接: 我的数据 https://spreadsheets.google.com/feeds/worksheets/0AmvmSNjQXtJFdE1lTlFxVXZCLUN0OFpqa3oyM2d4bEE/public/basic
Google数据 http://spreadsheets.google.com/feeds/worksheets/twd6syM493oFqIFWeIm8qGw/public/basic“
我无法弄清楚为什么我会收到此错误。任何帮助将不胜感激。
答案 0 :(得分:1)
检查传递给此方法的参数日期。它似乎是null
,显然不是一个有效的日期。
答案 1 :(得分:0)
因为@henrik已经发布了您当前的实际问题,我会根据您发布的代码提供一些建议:
sTimeFormat
,它必须至少是static
变量,并且可能也是final
(在此上下文中通常也应如此)。但是,您没有遵循命名约定 - 可能应该命名为TIMESTAMP_FORMATTER
(如果您要做的唯一事情是获取实际日期,请使用TIMESTAMP_PARSER
)。此外,虽然您不太可能在Android设备上使用多个线程,但请注意DateFormat
和SimpleDateFormat
不线程安全 - 标准做法是构建一个复制每次使用。setToCanonicalDate
方法或一些从解析中获取输出的方法,并将其设置为有效的年份和时区。你分发该应用程序的距离有多远?我住在太平洋时区 - 你的默认设置对我没有好处。答案 2 :(得分:-2)
这就是你如何长时间工作:
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();