Как преобразовать строку в дату с помощью SimpleDateFormat?
у меня есть этот фрагмент кода:
DateFormat formatter1;
formatter1 = new SimpleDateFormat("mm/DD/yyyy");
System.out.println((Date)formatter1.parse("08/16/2011"));
когда я запускаю это, я получаю это как выход:
Sun Jan 16 00:10:00 IST 2011
Я ожидал:
Tue Aug 16 "Whatever Time" IST 2011
Я хочу сказать, что я не получаю в месяц, как ожидалось. В чем же ошибка?
10 ответов:
попробуйте это:
new SimpleDateFormat("MM/dd/yyyy")
MM
- "месяц" (неmm
)dd
"день" (неDD
)это все javadoc для SimpleDateFormat
FYI, причина, по которой ваш формат по-прежнему является допустимым форматом даты, заключается в следующем:
mm
это "минуты"DD
"день в году"кроме того, вам не нужно бросать
Date
... это уже и aDate
(или взрывается):public static void main(String[] args) throws ParseException { System.out.println(new SimpleDateFormat("MM/dd/yyyy").parse("08/16/2011")); }
выход:
Tue Aug 16 00:00:00 EST 2011
вуаля!
м - мин м - месяцев
Letter Date or Time Component Presentation Examples G Era designator Text AD y Year Year 1996; 96 M Month in year Month July; Jul; 07 w Week in year Number 27 W Week in month Number 2 D Day in year Number 189 d Day in month Number 10 F Day of week in month Number 2 E Day in week Text Tuesday; Tue a Am/pm marker Text PM H Hour in day (0-23) Number 0 k Hour in day (1-24) Number 24 K Hour in am/pm (0-11) Number 0 h Hour in am/pm (1-12) Number 12 m Minute in hour Number 30 s Second in minute Number 55 S Millisecond Number 978 z Time zone General time zone Pacific Standard Time; PST; GMT-08:00 Z Time zone RFC 822 time zone -0800
используйте функцию ниже
/** * Format a time from a given format to given target format * * @param inputFormat * @param inputTimeStamp * @param outputFormat * @return * @throws ParseException */ private static String TimeStampConverter(final String inputFormat, String inputTimeStamp, final String outputFormat) throws ParseException { return new SimpleDateFormat(outputFormat).format(new SimpleDateFormat( inputFormat).parse(inputTimeStamp)); }
пример использования выглядит следующим образом:
try { String inputTimeStamp = "08/16/2011"; final String inputFormat = "MM/dd/yyyy"; final String outputFormat = "EEE MMM dd HH:mm:ss z yyyy"; System.out.println(TimeStampConverter(inputFormat, inputTimeStamp, outputFormat)); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); }
String newstr = "08/16/2011"; SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy"); SimpleDateFormat format = new SimpleDateFormat("EE MMM dd hh:mm:ss z yyyy"); Calendar c = Calendar.getInstance(); c.setTime(format1.parse(newstr)); System.out.println(format.format(c.getTime()));
очень простой пример.
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy"); Date date = new Date(); Date date1 = new Date(); try { System.out.println("Date1: "+date1); System.out.println("date" + date); date = simpleDateFormat.parse("01-01-2013"); date1 = simpleDateFormat.parse("06-15-2013"); System.out.println("Date1 is:"+date1); System.out.println("date" + date); } catch (Exception e) { System.out.println(e.getMessage()); }
вы можете решить проблему очень просто, как Сначала преобразуйте заданную строку в объект даты например:
java.util.Date date1 = new Date("11/19/2015"); SimpleDateFormat formatter = new SimpleDateFormat("MMM dd yyyy HH:mma"); String format = formatter.format(date); System.out.println(format);
этот кусок кода помогает конвертировать туда и обратно
System.out.println("Date: "+ String.valueOf(new Date())); SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String stringdate = dt.format(new Date()); System.out.println("String.valueOf(date): "+stringdate); try { Date date = dt.parse(stringdate); System.out.println("parse date: "+ String.valueOf(date)); } catch (ParseException e) { e.printStackTrace(); }
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu"); System.out.println(LocalDate.parse("08/16/2011", dateFormatter));
выход:
2011-08-16
я привожу современный ответ. ответ богемского правильно и был хороший ответ, когда он был написан 6 лет назад. Теперь заведомо хлопотно
SimpleDateFormat
класс давно устарел и у нас есть намного лучше вjava.time
, современный API даты и времени Java. Я настоятельно рекомендую вам использовать это вместо старых классов даты и времени.что пошло не так в вашей код?
когда я разбора
08/16/2011
используя ваш сниппет, я получаюSun Jan 16 00:08:00 CET 2011
. Начиная с нижнего регистраmm
это на несколько минут, я получаю00:08:00
(8 минут после полуночи), и с прописныхDD
это для Дня года, я получаю 16 января.на
java.time
слишком формат строки шаблона чувствительны к регистру, и нам нужно было использовать верхний регистрMM
за месяц и строчные ДД для День месяца.вопрос: Могу ли я использовать java.время с моей версией Java?
да,
java.time
прекрасно работает на Java 6 и позже, и на старых и новых устройствах Android.
- в Java 8 и более поздних версиях и на новых устройствах Android (от уровня API 26, мне сказали) современный API поставляется встроенным.
- в Java 6 и 7 получите Threeten Backport, backport новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
- на Android (старше) используйте Android-версию Threeten Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
С подпакетами.ссылки
- Oracle tutorial: Date Time объясняя, как использовать
java.time
.- запрос спецификации Java (JSR) 310, где
java.time
была впервые описана.- ThreeTen Backport project на базу
java.time
к Java 6 и 7 (ThreeTen для JSR-310).- ThreeTenABP, Android издание Threeten Backport
- вопрос: Как использовать ThreeTenABP в Android Project С очень подробного объяснения.
String localFormat = android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "EEEE MMMM d"); return new SimpleDateFormat(localFormat, Locale.getDefault()).format(localMidnight);
возвращает формат, основанный на языке устройства. Обратите внимание, что getBestDateTimePattern() возвращает "наилучшую локализованную форму данного скелета для данной локали"
вы использовали какой-то ошибки типа. Если вы хотите установить 16.08.2011 на следующей схеме. Это неправильно, потому что
мм расшифровывается как минут используйте мм как это месяцев
DD и неправильно, должно быть dd представляет дней
попробуйте это для достижения результата, который вы хотите получить (
Tue Aug 16 "Whatever Time" IST 2011
),String date = "08/16/2011"; //input date as String SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy"); // date pattern Date myDate = simpleDateFormat.parse(date); // returns date object System.out.println(myDate); //outputs: Tue Aug 16 00:00:00 IST 2011