Преобразование строковых дат в java

Мне нужно сравнить две строковые даты в java:

String date1 = "2017-05-02";
String date2 = "5/2/2017";
//formatter for the first date
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-mm-dd");
Date formattedDate1 = formatter.parse(date1);
//formatter for the second date
formatter = new SimpleDateFormat("m/d/yyyy");
Date formattedDate2 = formatter.parse(date2);
//Wrong results
String formatted1 = formattedDate1.toString(); //Mon Jan 02 00:05:00 EET 2017
String formatted2 = formattedDate2.toString(); //Mon Jan 02 00:05:00 EET 2017

На самом деле, если я сравню эти 2, я, вероятно, получу «правду», но мои даты не январь, а «5 мая 2017 года».

Другой вопрос заключается в том, что я не могу использовать объект Date, мне нужно фактически преобразовать «2017-05-02» в «5/2/2017», а затем передать его другой функции.


person Alex Smoke    schedule 08.06.2017    source источник
comment
m Минута в часе согласно javadocs   -  person Scary Wombat    schedule 08.06.2017
comment
К вашему сведению, неприятные старые классы даты и времени, такие как java.util.Date , java.util.Calendar и java.text.SimpleTextFormat теперь являются устаревшими, вытесненными java.time. См. учебник Oracle.   -  person Basil Bourque    schedule 08.06.2017
comment
Чтобы преобразовать 2017-05-02 в 02.05.2017, используйте LocalDate.parse(yyyyMmDdString).format(DateTimeFormatter.ofPattern("M/d/uuuu")).   -  person Ole V.V.    schedule 08.06.2017


Ответы (3)


Прочитайте SimpleDateFormat javadoc:

Месяц в верхнем регистре М:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

...

formatter = new SimpleDateFormat("M/d/yyyy");

М в нижнем регистре - минута.

person Jens    schedule 08.06.2017
comment
@Downvoter: Пожалуйста, объясните? - person Jens; 08.06.2017

И поскольку старая дата java нарушена, и мы все должны перестать это изучать, и поскольку новые функции в java8 будут полезны для всех нас в будущем, вот еще один вариант с использованием javaTime api

String date1 = "2017-05-02";
String date2 = "5/2/2017";
LocalDate d1 = LocalDate.parse(date1, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDate d2 = LocalDate.parse(date2, DateTimeFormatter.ofPattern("M/d/yyyy"));

System.out.println(d1);
System.out.println(d2);
System.out.println(d2.isEqual(d1));
person ΦXocę 웃 Пepeúpa ツ    schedule 08.06.2017

m – минуты
M – месяц

Ознакомьтесь с шаблонами даты и времени http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

person Max    schedule 08.06.2017