Parse String to Date с другим форматом в Java

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

Например,

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

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

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

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

Ответ 1

Посмотрите 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();
}

Ответ 2

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

Ответ 3

ТЛ; др

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

Не объединяйте объект даты и времени со строкой, представляющей его значение. Объект даты и времени не имеет формата, в то время как строка имеет. Объект даты и времени, такой как 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 | output: mardi 19 mai 2009

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


О java.time

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

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

Чтобы узнать больше, ознакомьтесь с Учебником по Oracle. И поищите в Кару множество примеров и объяснений. Спецификация: 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
    • Более поздние версии Android связывают реализации классов java.time.
    • Для более ранних версий Android (& lt; 26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянуто выше). Смотрите Как использовать ThreeTenABP....

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

Ответ 4

Преобразовать дату строки в 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

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

Ответ 6

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

Ответ 7

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

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

: Дата с форматом dd/mm/dd: 21/10/2015

Ответ 8

Объект 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

Ответ 9

Предположим, у вас есть такая строка:

String mDate="2019-09-17T10:56:07.827088"

Теперь мы хотим изменить этот формат String отдельно для даты и времени в Java и Kotlin.

JAVA:

у нас есть метод для извлечения даты :

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.2009

И у нас есть метод для извлечения времени :

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утра

Котлин:

у нас есть функция для извлечения даты :

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.2009

И у нас есть метод для извлечения времени :

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утра