2015-08-24 59 views
0

我想字符串轉換在java.util.date但我有以下錯誤:轉換字符串java.util.Date的

HelloWorld.java:10: error: incompatible types: Date cannot be converted to String                                          
     return FORMATTER.parse(date);                                                    
          ^                                                     
HelloWorld.java:16: error: incompatible types: String cannot be converted to Date                                          
    Date date = convertStringToDate("2015-08-03 09:19:00.000");  

我的代碼如下:

import java.text.SimpleDateFormat; 
import java.util.Date; 

public class HelloWorld{ 

private static final SimpleDateFormat FORMATTER = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 

public static String convertStringToDate(String date) { 
    if(date!=null){ 
     return FORMATTER.parse(date); 
    } 
    return null; 
} 

public static void main(String []args){ 
    Date date = convertStringToDate("2015-08-03 09:19:00.000"); 
    System.out.println(date); 
} 
} 
+0

請確認我的答案,並確認它是否解決了您的問題。 – seahawk

回答

2

您指定的格式與數據格式不匹配。

"yyyy-MM-dd hh:mm:ss"格式是不與由於"2015-08-03 09:19:00.000" 2個理由數據兼容:(1)AM/PM在日期缺少爲「HH」拍攝1-12小時,和(2)存在於日期字符串毫秒

替換下面提到的行,你的問題將得到解決。

private static final SimpleDateFormat FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

但是,上述提到的問題都不會導致您得到的例外,因爲默認情況下會忽略毫秒。

異常的可能原因是方法「convertStringToDate」或hh的返回類型,其值超出0112之間的範圍。從StringDate

  • 更改日期格式hhHH

    1. 改變返回值類型。
  • +1

    因爲['parse'],輸入字符串中的毫秒數將被忽略(http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html#parse(java.lang.String ))「可能不會使用給定字符串的全部文本」。實際上,除非我們在解析之前調用FORMATTER.setLenient(false),否則即使忽略AM/PM也不重要。 –

    +0

    @MickMnemonic:謝謝哥們:)我假設所有可能的情況下,因爲問題中提供的代碼片段包含編譯時錯誤。 – seahawk

    5

    變化你的方法簽名改成這個:

    public static Date convertStringToDate(String date) 
    

    SimpleDateFormat.parse返回Date,而不是String

    此外,您還需要處理檢查ParseExceptionparse方法可能會拋出,或者通過在簽名中聲明throws ParseException(和處理在main除外),或者通過包裝例外成RuntimeException(有效終止程序時錯誤的輸入給定):

    public static Date convertStringToDate(String date) { 
        if (date != null) { 
         try { 
          return FORMATTER.parse(date); 
         } catch (ParseException e) { 
          // nothing we can do if the input is invalid 
          throw new RuntimeException(e); 
         } 
        } 
        return null; 
    } 
    

    最後,你應該注意,您只能解析小時值範圍從1到12與您當前的格式(yyyy-MM-dd hh:mm:ss)。因爲你正試圖從你的方法返回一個String

    private static final DateFormat FORMATTER = new SimpleDateFormat(
                   "yyyy-MM-dd HH:mm:ss"); 
    
    1

    是:如果你想要根據24小時制來分析,你應該使用HH模式爲每小時一部分,而不是。將其更改爲Date

    public static Date convertStringToDate(String date) { 
        if(date!=null){ 
         return FORMATTER.parse(date); 
        } 
        return null; 
    }