10

Преобразование строки в дату в Java

12

Как лучше всего преобразовать строку в формате '2 января 2010 года' в объект Date в Java?

В конечном итоге я хочу выделить месяц, день и год как целые числа, чтобы затем использовать

Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
long currentTime = date.getTime();

для преобразования даты в время.

5 ответ(ов)

0

Вы можете использовать класс SimpleDateFormat для преобразования строки с датой в объект типа Date. Вот пример кода для вашего случая:

String str_date = "11-June-07";
DateFormat formatter = new SimpleDateFormat("dd-MMM-yy");
Date date = formatter.parse(str_date);

В этом коде строка str_date содержит дату в формате "дд-месяц-гг". Метод parse() класса SimpleDateFormat преобразует эту строку в объект Date. Убедитесь, что вы импортировали необходимые классы:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.ParseException;

Также учтите, что метод parse() может выбросить исключение ParseException, поэтому рекомендуется обрабатывать его, добавив блок try-catch:

try {
    Date date = formatter.parse(str_date);
    // Используйте полученную дату
} catch (ParseException e) {
    e.printStackTrace(); // Обработка исключения
}

Так будет выглядеть ваш код с учетом обработки исключений.

0

Ваш код работает корректно. Вот как он выглядит с комментариями:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date;
try {
    // Парсинг строки в объект Date
    date = dateFormat.parse("2013-12-4");
    System.out.println(date.toString()); // Вывод: Wed Dec 04 00:00:00 CST 2013

    // Форматирование объекта Date обратно в строку
    String output = dateFormat.format(date);
    System.out.println(output); // Вывод: 2013-12-04
} 
catch (ParseException e) {
    e.printStackTrace();
}

Обратите внимание, что метод parse корректно обрабатывает незначающие нули в дате. Поэтому строка "2013-12-4" парсится успешно. На выходе вы получаете объект Date, который затем можно снова форматировать в строку в нужном формате yyyy-MM-dd. Если у вас возникнут какие-либо дополнительные вопросы, не стесняйтесь задавать их!

0

Вы можете использовать SimpleDateFormat, чтобы преобразовать строку в объект типа Date. Пример:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String strDate = "2000-01-01";
Date date = sdf.parse(strDate);

В этом коде создается экземпляр SimpleDateFormat с заданным форматом даты. Затем метод parse используется для преобразования строки strDate в объект типа Date. Убедитесь, что строка соответствует формату, указанному в SimpleDateFormat, иначе будет вызвано исключение ParseException.

0

Ваш вопрос касается преобразования форматов дат с использованием Java, и приведённый код содержит несколько небольших ошибок. Позвольте мне помочь вам с исправлением.

Во-первых, у вас неправильный символ для обозначения минут в формате даты. Вместо mm (минуты) вы используете mm (согласуется с минутами, но следует использовать dd для дней). Во-вторых, важно убедиться, что формат процентов соответствует формату данных, который вы передаете.

Вот исправленный вариант вашего кода:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateParser {

    public static String setDateParsing(String date) throws ParseException {
        // Это формат даты, который мы хотим
        DateFormat mSDF = new SimpleDateFormat("hh:mm a");

        // Этот формат даты фактически присутствует
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date parsedDate = formatter.parse(date);

        return mSDF.format(parsedDate);
    }

    public static void main(String[] args) {
        try {
            String date = "2016-05-06 16:40:32";
            String formattedDate = setDateParsing(date);
            System.out.println(formattedDate);  // Ожидаемый вывод: 04:40 PM
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

Обратите внимание на следующие изменения:

  1. Я изменил формат строк для парсинга на "yyyy-MM-dd HH:mm:ss", чтобы правильно учесть часы, минуты и секунды.
  2. Я также изменил формат для вывода времени на "hh:mm a", что соответствует 12-часовому формату с добавлением AM/PM.

Теперь код будет правильно работать с вашим примером.

0

Ваш код представляет собой простую тестовую программу на Java, которая демонстрирует форматирование дат и преобразование между строками и длинными значениями (тип long). Он полезен для работы с временными метками, которые могут встретиться в логах. Приведу основные моменты и пояснения.

Пояснение к коду:

  1. Импортировать нужные классы: Вы используете несколько классов из пакета java.text для форматирования дат и java.util для работы с временными зонами и списками.

  2. Установка временной зоны:

    TimeZone timezone = TimeZone.getTimeZone("UTC");
    

    Обратите внимание на установку временной зоны - это ключевой момент. Если не указать временную зону, дата будет отображаться в зависимости от настройки системы.

  3. Форматирование даты:

    DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSS");
    formatter.setTimeZone(timezone);
    

    Здесь вы используете 24-часовой формат для отображения времени, что предотвращает ошибки, связанные с 12-часовым форматом.

  4. Проверка дат: Вы добавляете различные строковые представления дат в список и позже преобразуете их обратно в миллисекунды.

  5. Вывод на консоль: Имеется две части вывода:

    • Преобразование строк в длинные значения (миллисекунды с 1 января 1970 года).
    • Преобразование длинных значений обратно в строковый формат.

Результаты тестирования:

Вывод на консоль включает в себя преобразованные значения, которые ожидаемы и показывают, как каждая дата соотносится с типом long. Например, вы корректно показываете, что "01-01-1970 00:00:00.000" соответствует 0, так как это начало эпохи Unix.

Обратите внимание на:

  • Дату "01-01-1970 24:00:00.000" - это неправильное значение, так как 24:00:00 указывает на следующий день. Лучше использовать "02-01-1970 00:00:00.000".
  • Обработка исключений может быть улучшена — вы можете добавить больше информации о дате, которая не могла быть распознана.

Ваш код демонстрирует основные операции с датами в Java и может служить хорошей основой для дальнейших исследований в области работы со временем.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь