2017-02-11 5 views
-4

Мне нужно заменить SimpleDataFormat на Java 8 DateTimeFormatter. Ниже приведен код с SimpleDateFormat.Java 8 DateTimeFormatter

DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
     Date date = sdf.parse(source); 

Теперь мне нужно изменить его на DateTimeFormatter. Я пробовал как ниже

LocalDateTime ld = LocalDateTime.now(); 
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 
Date startdate = dtf.parse(dtf); 

Теперь это генерирует исключение.

+0

Редактировать сообщение, чтобы включить то, что вы пробовали, и почему это не работает – Janar

+0

@Janar Я обновил вопрос. можете ли вы, пожалуйста, возместить его сейчас? – user1111880

+0

В чем исключение, если вы просто обрабатываете его с помощью предложения 'try catch'? – Tacolibre

ответ

0

Если вы ищете эквивалент своего sdf в DateTimeFormatter, попробуйте DateTimeFormatter.ISO_LOCAL_DATE
Изучите класс DateTimeFormatter для получения дополнительных форматов.

LocalDateTime time = LocalDateTime.now(); 
    time.format(DateTimeFormatter.ISO_LOCAL_DATE); 

Использование LocalDate вместо LocalDateTime если заинтересуют только дата.

0

Один из способов сделать это было бы -

LocalDateTime ld = LocalDateTime.now(); 
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 
    String date = ld.format(dtf); 
+0

Мне нужен он в объекте Date – user1111880

+3

@ user1111880: Тогда вы не должны использовать 'DateTimeFormatter', который предназначен для классов' java.time'. –

+1

@ user1111880 вот прекрасный пример http://stackoverflow.com/questions/22929237/convert-java-time-localdate-into-java-util-date-type –

1
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 
    LocalDate localDate = LocalDate.parse("2017-02-11", dtf); 
    System.out.println(localDate.toString()); 

если вы хотите объект Date из LocalDate, следующие работы

Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); 

Как @JonSkeet рекомендуется, если вы используете Java 8, вероятно, следует избегать java.util.Date всего

1

tl; др

java.util.Date.from(

LocalDate.parse("2017-01-23") 
     .atStartOfDay(ZoneId.of("America/Montreal")) 
     .toInstant() 

) 

Нет необходимости форматирования рисунка

Нет шаблон форматирования необходимо. Ваша входная строка находится в стандартном формате ISO 8601. Эти стандартные форматы используются по умолчанию в классах java.time для синтаксического анализа и генерации строк.

LocalDate

Использование LocalDate для даты только значения, без времени суток и без временной зоны.

LocalDate ld = LocalDate.parse("2017-01-23"); 

ZonedDateTime

Если вы хотите дату и время, пусть java.time определить первый момент дня. Не предполагайте, что первый момент: 00:00:00.

Для определения первого момента дня требуется часовой пояс. Дата меняется по всему миру по зонам.

ZoneId z = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ld.atStartOfDay(z); 

Если вы хотите, чтобы воспринимать этот момент через призму UTC, извлечь Instant объект.

Instant instant = zdt.toInstant(); 

Instant эквивалентно старому унаследованного класса java.util.Date. Оба представляют момент на временной шкале в UTC. Современный класс имеет более точное разрешение, наносекунды, а не миллисекунды.

Избегайте java.util.Date

Как уже упоминалось другие, вы должны придерживаться современных классов java.time. Но если вам нужно, вы можете конвертировать. Посмотрите на новые методы, добавленные в старые классы.

java.util.Date d = java.util.Date.from(instant) ; 

 Смежные вопросы

  • Нет связанных вопросов^_^