Use LocalDateTime#parse()(ou ZonedDateTime#parse()se a sequência contiver uma parte do fuso horário) para analisar umString em um determinado padrão em a LocalDateTime.
String oldstring = "2011-01-18 00:00:00.0";
LocalDateTime datetime = LocalDateTime.parse(oldstring, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));
Use LocalDateTime#format()(ou ZonedDateTime#format()) para formatar a LocalDateTimeem um Stringem um determinado padrão.
String newstring = datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(newstring); // 2011-01-18
Ou , quando você ainda não estiver no Java 8, use SimpleDateFormat#parse()para analisar a Stringem um determinado padrão em umaDate .
String oldstring = "2011-01-18 00:00:00.0";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(oldstring);
Use SimpleDateFormat#format()para formatar a DateemString em um determinado padrão.
String newstring = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println(newstring); // 2011-01-18
Veja também:
Atualização : conforme sua tentativa falhada: os padrões diferenciam maiúsculas de minúsculas . Leia o java.text.SimpleDateFormatjavadoc sobre o que as partes individuais representam. Assim, por exemplo, Mdurante meses e mminutos. Além disso, existem anos de quatro dígitos yyyy, não cinco yyyyy. Veja mais de perto os trechos de código que eu postei aqui acima.