2013-10-01 20 views
2

我想將作爲String傳遞給SimpleDateFormat對象的Timestamp值轉換爲Time Value,但它會引發Unparseable日期異常。java.text.ParseException:在Java中將時間戳值轉換爲時間時的不可解析日期異常

java.text.ParseException: Unparseable date: "Thu Jan 1 17:45:00 UTC+0530 1970" 

請找到下面的代碼,我已經實現了(不工作):

static SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US); 
static SimpleDateFormat inputFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US); 
static SimpleDateFormat outputFormatTime = new SimpleDateFormat("HH:mm:ss"); 

public static String convertUtcDateStringToTime(String utcDateValue) throws Exception 
    { 
     Date parsedDate = dateFormat.parse(utcDateValue); 
     String returnDate=outputFormatTime.format(inputFormat.parse(parsedDate.toString())); 
     return returnDate; 
    } 

如果我使用下面的下面所提到

The Value which i am passing is Thu Jan 1 17:45:00 UTC+0530 1970 

柏迪我得到一個異常代碼它工作正常,我(工作),但它是我想要避免日期的折舊功能..

@SuppressWarnings("deprecation") 
public static String convertUtcDateStringToTime(String utcDateValue) throws Exception 
{ 
    Date dateValue=new Date(utcDateValue); 
    Date parsedDate = dateFormat.parse(dateValue.toString()); 
    String returnDate=outputFormatTime.format(inputFormat.parse(parsedDate.toString())); 
    return returnDate; 
} 

請指導我執行我錯過的邏輯。提前致謝。

回答

2

首先,你的第二個SimpleDateFormat對象,根本不需要。你正在做額外的工作,這是不需要的。因此,刪除這個變量:

static SimpleDateFormat inputFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US); // Not needed. 

其次DateFormat#format(Date)方法需要Date對象。你通過了String。那不行。這就是爲什麼你不需要上述的對象。不需要再次執行inputFormat.parse(parsedDate.toString())。現在


,格式解析當前的字符串應該是:

"EEE MMM dd HH:mm:ss 'UTC'z yyyy" 

你需要給在引號中UTCz之前。或者更普遍的情況:

"EEE MMM dd HH:mm:ss zZ yyyy" 

所以,你的代碼應該是這樣的:

static SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zZ yyyy", Locale.US); 
static SimpleDateFormat outputFormatTime = new SimpleDateFormat("HH:mm:ss"); 

public static String convertUtcDateStringToTime(String utcDateValue) throws Exception 
    { 
     Date parsedDate = dateFormat.parse(utcDateValue); 
     String returnDate=outputFormatTime.format(inputFormat); 
     return returnDate; 
    } 
1

您輸入dateformat必須

SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zZ yyyy", Locale.US); 

其他格式化所有的高達,您可以根據根據您的要求。

3

與除答案,如果格式化字符串是這樣

"EEE MMM dd HH:mm:ss z yyyy" 

那麼你輸入的字符串應該是

"Thu Jan 1 17:45:00 +0530 1970" 

注意「UTC」作爲隱含跳過它指的是RFC 822 time zone

+0

..謝謝親愛的..朋友..回答也幫助了我:-) –

相關問題