// Create an instance of SimpleDateFormat used for formatting // the string representation of date according to the chosen pattern DateFormatdf=newSimpleDateFormat(pattern);
// Get the today date using Calendar object. Datetoday= Calendar.getInstance().getTime(); // Using DateFormat format method we can create a string // representation of a date with the defined format. StringtodayAsString= df.format(today);
// Print the result! System.out.println("Today is: " + todayAsString);
Commons-lang DateFormatUtils полон полезных функций (если у вас есть commons-lang в вашем пути к классу)
//Formats a date/time into a specific pattern DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");
Ответ 4
tl;dr
myUtilDate.toInstant() // Convert `java.util.Date` to `Instant`. .atOffset( ZoneOffset.UTC ) // Transform `Instant` to `OffsetDateTime`. .format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // Generate a String. .replace( "T" , " " ) // Put a SPACE in the middle.
2014-11-14 14:05:09
java.time
Современный способ заключается в использовании классов java.time, которые теперь вытесняют старые устаревшие классы даты и времени.
Сначала преобразуйте ваш java.util.Date в Instant. Instant Класс представляет момент на временной шкале в UTC с разрешением в наносекунды (до девяти (9) знаков десятичной дроби).
Преобразования в / из java.time выполняются новыми методами, добавленными в старые классы.
Instantinstant= myUtilDate.toInstant();
Ваши java.util.Date и java.time.Instant указаны в UTC. Если вы хотите видеть дату и время в формате UTC, пусть будет так. Вызовите toString, чтобы сгенерировать строку в стандартном формате ISO 8601.
Stringoutput= instant.toString();
2014-11-14T14:05:09Z
Для других форматов вам необходимо преобразовать ваш Instant в более гибкий OffsetDateTime.
Чтобы получить строку в желаемом формате, укажите DateTimeFormatter. Вы можете указать пользовательский формат. Но я бы использовал один из предопределенных форматеров (ISO_LOCAL_DATE_TIME) и заменил T в его выводе ПРОБЕЛОМ.
Кстати, я не рекомендую формат такого рода, в котором вы намеренно теряете смещение от UTC или информацию о часовом поясе. Создает двусмысленность относительно значения даты и времени в этой строке.
Также остерегайтесь потери данных, поскольку любая доля секунды игнорируется (фактически усекается) в вашем строковом представлении значения даты-времени.
Чтобы увидеть тот же момент через призму времени на настенных часах определенного региона, примените aZoneId, чтобы получить a ZonedDateTime.
ZoneIdz= ZoneId.of( "America/Montreal" ); ZonedDateTimezdt= instant.atZone( z );
При выполнении этого кода очень большое количество раз, возможно, вам захочется быть немного более эффективным и избежать вызова String::replace. Удаление этого вызова также сокращает ваш код. При желании укажите свой собственный шаблон форматирования в вашем собственном DateTimeFormatter объекте. Кэшируйте этот экземпляр как константу или элемент для повторного использования.
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательным полигоном для возможных будущих дополнений к java.time.