Java 分析时间戳时出错
因此,我正在修改一个开源Google I/O开源应用程序(2010),当我尝试使用自定义Google电子表格同步应用程序时,出现以下错误,相同的标题不同的数据(似乎与默认Google电子表格同步良好) “同步错误:解析时间戳时出现问题:java.text.ParseException:不可解析的日期:“null 2010 10:45am-0700” 这是抛出错误的Java代码Java 分析时间戳时出错,java,android,datetime,google-docs,Java,Android,Datetime,Google Docs,因此,我正在修改一个开源Google I/O开源应用程序(2010),当我尝试使用自定义Google电子表格同步应用程序时,出现以下错误,相同的标题不同的数据(似乎与默认Google电子表格同步良好) “同步错误:解析时间戳时出现问题:java.text.ParseException:不可解析的日期:“null 2010 10:45am-0700” 这是抛出错误的Java代码 private static long parseTime(String date, String time)
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)的链接:
我的数据
谷歌数据
"
我不明白为什么我会犯这个错误。任何帮助都将不胜感激。请检查传入此方法的参数日期。它似乎是
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();
因为@henrik已经发布了您当前的实际问题,我将根据您发布的代码给出一些建议:
sTimeFormat
,它必须至少是一个静态
变量,并且可能也是最终
(在本文中通常应该是)。但是,您没有遵循命名约定-它可能应该命名为TIMESTAMP\u FORMATTER
(如果您只需要获取实际日期,请使用TIMESTAMP\u PARSER
)。此外,尽管您不太可能在android设备上使用多线程,但请注意DateFormat
和SimpleDateFormat
是而不是threadsafe-标准做法是为每次使用构造一个副本setToCanonicalDate
方法或其他方法,从解析中获取输出并将其设置为有效的年份和时区。你把这个应用程序发布到了什么程度?我住在太平洋时区——你的违约对我没有任何好处-1-虽然这是真的,但在这里似乎并不相关。另外,如果
dp
是一个日期,那么您使用的是不推荐的(或应该的)方法。这也是我的第一个想法,应用程序读取的列中包含日期,但这些都不是空的。