Я хочу , чтобы преобразовать String
в Date
в различных форматах.
Например,
Я получаю от пользователя,
String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format
Я хочу преобразовать это fromDate
как объект Date "yyyy-MM-dd"
формата
Как я могу это сделать?
Ответы:
Взгляните на
SimpleDateFormat
. Код выглядит примерно так:SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd"); try { String reformattedStr = myFormat.format(fromUser.parse(inputString)); } catch (ParseException e) { e.printStackTrace(); }
источник
Date
формате вместо строкового формата?parse
и не продолжайтеformat
.parse
анализирует строку на дату.parse
дает мне ,date format
как ,Fri Jan 06 00:01:00 EST 2012
но это нужно в2012-01-06
формате датаSystem.out.println(anyDateObject)
метод toString () по умолчанию, который, как было сказано, печатает в этом формате, напримерFri Jan 06 00:01:00 EST 2012
. Вам нужно переопределить его в соответствии со своими потребностями.java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
теперь наследие , вытесняется java.time классов , встроенных в Java 8 и Java 9. См руководство по Oracle .tl; dr
LocalDate.parse( "19/05/2009" , DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) )
Детали
Другие ответы с
java.util.Date
,java.sql.Date
иSimpleDateFormat
в настоящее время устарели.LocalDate
Современный способ установить дату и время - это, в частности, работать с классами java.time
LocalDate
.LocalDate
Класс представляет собой дату только значение без времени суток и без временной зоны.DateTimeFormatter
Чтобы проанализировать или сгенерировать String, представляющий значение даты и времени, используйте
DateTimeFormatter
класс.DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ); LocalDate ld = LocalDate.parse( "19/05/2009" , f );
Не объединяйте объект даты и времени со строкой, представляющей его значение. Объект даты и времени не имеет формата , в отличие от String. Объект даты и времени, например
LocalDate
, может генерировать String для представления своего внутреннего значения, но объект даты и времени и String являются отдельными отдельными объектами.Вы можете указать любой настраиваемый формат для создания строки. Или позвольте java.time выполнить автоматическую локализацию.
Выгрузить в консоль.
System.out.println( "ld: " + ld + " | output: " + output );
Посмотрите в действии на IdeOne.com .
О java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как
java.util.Date
,Calendar
, иSimpleDateFormat
.Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поищите в Stack Overflow множество примеров и объяснений. Спецификация - JSR 310 .
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или новее. Нет необходимости в строках, нет необходимости в
java.sql.*
занятиях.Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательной площадкой для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как
Interval
,YearWeek
,YearQuarter
, и более .источник
Используйте
SimpleDateFormat
класс:private Date parseDate(String date, String format) throws ParseException { SimpleDateFormat formatter = new SimpleDateFormat(format); return formatter.parse(date); }
Применение:
Date date = parseDate("19/05/2009", "dd/MM/yyyy");
Для эффективности вы можете хранить свои средства форматирования в хэш-карте. Хэш-карта является статическим членом вашего класса util.
private static Map<String, SimpleDateFormat> hashFormatters = new HashMap<String, SimpleDateFormat>(); public static Date parseDate(String date, String format) throws ParseException { SimpleDateFormat formatter = hashFormatters.get(format); if (formatter == null) { formatter = new SimpleDateFormat(format); hashFormatters.put(format, formatter); } return formatter.parse(date); }
источник
Преобразование строковой даты в java.sql.Date
String fromDate = "19/05/2009"; DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); java.util.Date dtt = df.parse(fromDate); java.sql.Date ds = new java.sql.Date(dtt.getTime()); System.out.println(ds);//Mon Jul 05 00:00:00 IST 2010
источник
Проверьте javadocs, там
java.text.SimpleDateFormat
описано все, что вам нужно.источник
Хотя
SimpleDateFormat
это действительно сработает для ваших нужд, вы также можете попробовать Joda Time , который, по-видимому, является основой для переделанной библиотеки Date в Java 7. Хотя я не использовал ее часто, я слышал только хорошие вещи об этом, и если вы активно манипулируете датами в своих проектах, возможно, стоит изучить это.источник
Предположим, у вас есть такая строка:
String mDate="2019-09-17T10:56:07.827088"
Теперь мы хотим изменить этот
String
формат отдельно для даты и времени в Java и Kotlin .ЯВА:
у нас есть метод извлечения даты :
public String getDate() { try { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US); Date date = dateFormat.parse(mDate); dateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.US); return dateFormat.format(date); } catch (ParseException e) { e.printStackTrace(); } return null; }
Return
это: 17.09.2019И у нас есть метод извлечения времени :
public String getTime() { try { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US); Date date = dateFormat.parse(mCreatedAt); dateFormat = new SimpleDateFormat("h:mm a", Locale.US); return dateFormat.format(date); } catch (ParseException e) { e.printStackTrace(); } return null; }
Return
это: 10:56 AMКОТЛИН:
у нас есть функция для извлечения даты :
fun getDate(): String? { var dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US) val date = dateFormat.parse(mDate!!) dateFormat = SimpleDateFormat("MM/dd/yyyy", Locale.US) return dateFormat.format(date!!) }
Return
это: 17.09.2019И у нас есть метод извлечения времени :
fun getTime(): String { var dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US) val time = dateFormat.parse(mDate!!) dateFormat = SimpleDateFormat("h:mm a", Locale.US) return dateFormat.format(time!!) }
Return
это: 10:56 AMисточник
SimpleDateFormat
уроком. По крайней мере, не в качестве первого варианта. И не без оговорок. Сегодня у нас есть намного лучшеjava.time
, современный API даты и времени Java и егоDateTimeFormatter
. ТакжеSimpleDateFormat
не может правильно анализировать 6 десятичных знаков в секундах (микросекундах).10:56 AM
что вы говорите, а вместо этого11:09 AM
(проверено на Oracle jdk-11.0.3).DateTimeFormatter
нам нужноminsdk 26
или выше, то это нехорошо,10:56 AM
Простой способ отформатировать дату и преобразовать ее в строку
Date date= new Date(); String dateStr=String.format("%td/%tm/%tY", date,date,date); System.out.println("Date with format of dd/mm/dd: "+dateStr);
источник
У
Date
объекта нет формата , это представление. Дата может быть представлена значкомString
в желаемом формате .Например, "
yyyy-MM-dd
", "yy-MMM-dd
", "dd-MMM-yy
" и т. Д.Чтобы добиться этого, вы можете использовать
SimpleDateFormat
Попробуй это,
String inputString = "19/05/2009"; // i.e. (dd/MM/yyyy) format SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date dateFromUser = fromUser.parse(inputString); // Parse it to the exisitng date pattern and return Date type String dateMyFormat = myFormat.format(dateFromUser); // format it to the date pattern you prefer System.out.println(dateMyFormat); // outputs : 2009-05-19 } catch (ParseException e) { e.printStackTrace(); }
Это результаты: 2009-05-19
источник