2015-08-24 7 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" из-за двух причин: (1) AM/PM отсутствует Дата как «чч» занимает 1-12 часов, и (2) миллисекунды, присутствующие в строки даты

Замените ниже указанной строки, и ваша проблема будет решена.

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

Но ни одна из вышеупомянутых проблем не может привести к тому, что исключение, которое вы получили за миллисекунды, по умолчанию игнорируется.

Возможными причинами исключения являются тип возврата метода "convertStringToDate" или hh, имеющий значение, выходящее за пределы диапазона между 01 и 12.

  1. изменить тип возвращаемого из String в Date
  2. формат даты Изменение hh в HH.
+1

Миллисекунды во входной строке просто игнорируются, потому что ['parse'] (http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html#parse (java.lang.String)) "может не использовать весь текст данной строки". На самом деле даже отсутствие AM/PM не имеет значения, если мы не будем называть 'FORMATTER.setLenient (false);' перед разбором. –

+0

@MickMnemonic: спасибо приятелю :) Я принял все возможные случаи, потому что предоставленный в коде фрагмент кода содержит ошибку времени компиляции. – seahawk

5

Изменить ваш метод подписи в это вместо:

public static Date convertStringToDate(String date) 

SimpleDateFormat.parse возвращает Date, не String.

Кроме того, вы должны обращаться с проверенными ParseException, что метод parse может бросить, либо объявляя 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). Если вы хотите, чтобы разобрать в соответствии с 24-часовой, вы должны использовать HH шаблон для часов части вместо:

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

Это потому, что вы пытаетесь вернуть String из метода. Измените его на Date.

public static Date convertStringToDate(String date) { 
    if(date!=null){ 
     return FORMATTER.parse(date); 
    } 
    return null; 
} 
Смежные вопросы