Преобразование строки в дату в Java
Как лучше всего преобразовать строку в формате '2 января 2010 года' в объект Date
в Java?
В конечном итоге я хочу выделить месяц, день и год как целые числа, чтобы затем использовать
Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
long currentTime = date.getTime();
для преобразования даты в время.
5 ответ(ов)
Вы можете использовать класс 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(); // Обработка исключения
}
Так будет выглядеть ваш код с учетом обработки исключений.
Ваш код работает корректно. Вот как он выглядит с комментариями:
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
. Если у вас возникнут какие-либо дополнительные вопросы, не стесняйтесь задавать их!
Вы можете использовать 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
.
Ваш вопрос касается преобразования форматов дат с использованием 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();
}
}
}
Обратите внимание на следующие изменения:
- Я изменил формат строк для парсинга на
"yyyy-MM-dd HH:mm:ss"
, чтобы правильно учесть часы, минуты и секунды. - Я также изменил формат для вывода времени на
"hh:mm a"
, что соответствует 12-часовому формату с добавлением AM/PM.
Теперь код будет правильно работать с вашим примером.
Ваш код представляет собой простую тестовую программу на Java, которая демонстрирует форматирование дат и преобразование между строками и длинными значениями (тип long
). Он полезен для работы с временными метками, которые могут встретиться в логах. Приведу основные моменты и пояснения.
Пояснение к коду:
Импортировать нужные классы: Вы используете несколько классов из пакета
java.text
для форматирования дат иjava.util
для работы с временными зонами и списками.Установка временной зоны:
TimeZone timezone = TimeZone.getTimeZone("UTC");
Обратите внимание на установку временной зоны - это ключевой момент. Если не указать временную зону, дата будет отображаться в зависимости от настройки системы.
Форматирование даты:
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSS"); formatter.setTimeZone(timezone);
Здесь вы используете 24-часовой формат для отображения времени, что предотвращает ошибки, связанные с 12-часовым форматом.
Проверка дат: Вы добавляете различные строковые представления дат в список и позже преобразуете их обратно в миллисекунды.
Вывод на консоль: Имеется две части вывода:
- Преобразование строк в длинные значения (миллисекунды с 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 и может служить хорошей основой для дальнейших исследований в области работы со временем.
Как преобразовать строку в int в Java?
Как разделить строку в Java?
Преобразование Unix-метки времени в формат времени в JavaScript
Как сгенерировать случайную алфавитно-цифровую строку
Как преобразовать int в String?