Разбор строки в дату с другим форматом в Java - PullRequest
82 голосов
/ 19 мая 2009

Я хочу конвертировать String в Date в разных форматах.

Например,

Я получаю от пользователя,

String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format

Я хочу преобразовать fromDate в объект Date "yyyy-MM-dd" формата

Как я могу это сделать?

Ответы [ 8 ]

172 голосов
/ 19 мая 2009

Взгляните на 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();
}
12 голосов
/ 19 мая 2009

Используйте класс 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");

Для эффективности вы хотели бы хранить ваши средства форматирования в хэш-карте. Хэш-карта является статическим членом вашего класса утилит.

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);
}
9 голосов
/ 26 октября 2016

ТЛ; др

LocalDate.parse( 
    "19/05/2009" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) 
)

Подробнее

Остальные ответы с java.util.Date, java.sql.Date и SimpleDateFormat устарели.

LocalDate

Современный способ создания даты и времени - это работа с классами java.time, в частности LocalDate. Класс LocalDate представляет значение только для даты без времени суток и без часового пояса.

DateTimeFormatter

Чтобы проанализировать или сгенерировать строку, представляющую значение даты и времени, используйте класс DateTimeFormatter.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate ld = LocalDate.parse( "19/05/2009" , f );

Не путайте объект даты и времени со строкой, представляющей его значение. Объект даты и времени имеет нет в формате , в то время как String имеет. Объект даты и времени, такой как LocalDate, может генерировать строку для представления ее внутреннего значения, но объект даты и времени и отдельные строки являются отдельными объектами.

Вы можете указать любой произвольный формат для генерации строки. Или позвольте java.time выполнить работу по автоматической локализации.

DateTimeFormatter f = 
    DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
                     .withLocale( Locale.CANADA_FRENCH ) ;
String output = ld.format( f );

Дамп на консоль.

System.out.println( "ld: " + ld + " | output: " + output );

ld: 2009-05-19 | выходной: марди 19 май 2009

Смотрите в действии на IdeOne.com .


О java.time

Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .

Вы можете обмениваться java.time объектами напрямую с вашей базой данных. Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.* классах.

Где получить классы java.time?

  • Java SE 8 , Java SE 9 и выше
    • Встроенный.
    • Часть стандартного Java API со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport .
  • Android

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и more .

7 голосов
/ 21 августа 2012

Преобразовать строковую дату в 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
5 голосов
/ 19 мая 2009

Проверьте javadocs для java.text.SimpleDateFormat Он описывает все, что вам нужно.

3 голосов
/ 19 мая 2009

Хотя SimpleDateFormat действительно будет работать для ваших нужд, кроме того, вы можете проверить Joda Time , который, очевидно, является основой для переделанной библиотеки дат в Java 7. Хотя я не очень часто этим пользовался, я ничего об этом не слышал, кроме хороших слов, и, если бы вы интенсивно манипулировали датами в своих проектах, возможно, стоило бы на них взглянуть.

1 голос
/ 21 октября 2015

Простой способ форматирования даты и преобразования в строку

    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);

вывод: дата в формате дд / мм / дд: 21/10 / 2015

0 голосов
/ 25 июля 2018

A 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...