解析时间戳时出错

时间:2012-03-14 15:28:16

标签: java android datetime google-docs

所以我正在修改其中一个开源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

我无法弄清楚为什么我会收到此错误。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

因为@henrik已经发布了您当前的实际问题,我会根据您发布的代码提供一些建议:

  1. 您正在使用sTimeFormat,它必须至少是static变量,并且可能也是final(在此上下文中通常也应如此)。但是,您没有遵循命名约定 - 可能应该命名为TIMESTAMP_FORMATTER(如果您要做的唯一事情是获取实际日期,请使用TIMESTAMP_PARSER)。此外,虽然您不太可能在Android设备上使用多个线程,但请注意DateFormatSimpleDateFormat 线程安全 - 标准做法是构建一个复制每次使用。
  2. 在尝试解析时,您手动格式化时间戳本身。没有意义 - 您应该使用现有数据(直接从xml或渲染的html),并提供自定义格式字符串。
  3. 您要设置日期,年份和时区的两个部分。至少应该将其移到实际的解析部分之外。您应该编写一个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();