2012-03-14 146 views
0

因此,我正在修改开放源代码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

我想不通为什么我得到这个错误。任何帮助将不胜感激。

回答

1

检查您传入此方法的参数日期。它似乎是null,这显然不是一个有效的日期。

+0

这是我第一次想到,应用程序读入的日期列中,但没有一个是空的。 – user1113888 2012-03-14 16:35:52

-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(); 
+0

-1 - 虽然这是真的,但在这里看起来并不相关。此外,如果'dp'是一个日期,那么您正在使用已弃用(或应该)的方法。 – 2012-03-14 15:42:04

0

因为@henrik已经发布您的实际目前的问题是什么,我给基于您发布代码的一些建议:

  1. 您正在使用sTimeFormat,它必须至少有一个static变量,并且可能也是final(通常应该在此上下文中)。但是,您并未遵循命名约定 - 应该将其命名为TIMESTAMP_FORMATTER(如果您唯一要做的是获取实际日期,请使用TIMESTAMP_PARSER)。此外,尽管您不太可能在Android设备上使用多个线程,但请注意DateFormatSimpleDateFormat不是线程安全 - 标准做法是为每个用途构建一个副本。
  2. 在尝试解析它之前,您正在手动设置时间戳本身的格式。没有意义 - 你应该使用现有的数据(直接来自xml,或者呈现的html),并提供一个自定义的格式化字符串。
  3. 您正在设置日期,年份和时区的两个部分。至少应该将其移到实际的分析部分之外。您应该编写一个setToCanonicalDate方法,或者将解析后的输出结果设置为有效的年份和时区。你分发这个应用有多远?我住在太平洋时区 - 你的默认对我没有任何好处。