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?
Проект 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утра