2012-03-14 136 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方法,或者將解析後的輸出結果設置爲有效的年份和時區。你分發這個應用有多遠?我住在太平洋時區 - 你的默認對我沒有任何好處。