Конвертировать java.util.Date в строку - PullRequest
383 голосов
/ 16 апреля 2011

Я хочу преобразовать объект java.util.Date в String в Java.

Формат 2010-05-30 22:15:52

Ответы [ 17 ]

731 голосов
/ 16 апреля 2011

Преобразование Дата в Строка с использованием DateFormat#format метод:

String pattern = "MM/dd/yyyy HH:mm:ss";

// Create an instance of SimpleDateFormat used for formatting 
// the string representation of date according to the chosen pattern
DateFormat df = new SimpleDateFormat(pattern);

// Get the today date using Calendar object.
Date today = Calendar.getInstance().getTime();        
// Using DateFormat format method we can create a string 
// representation of a date with the defined format.
String todayAsString = df.format(today);

// Print it!
System.out.println("Today is: " + todayAsString);

Из http://www.kodejava.org/examples/86.html

210 голосов
/ 16 апреля 2011
Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = formatter.format(date);
60 голосов
/ 25 января 2013

Commons-lang DateFormatUtils полон положительных героев (если у вас есть общий-ланг в вашем пути к классам)

//Formats a date/time into a specific pattern
 DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");
20 голосов
/ 02 октября 2016

tl; др

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 выполняются новыми методами, добавленными к старым классам.

Instant instant = myUtilDate.toInstant();

Оба ваших java.util.Date и java.time.Instant находятся в UTC .Если вы хотите видеть дату и время как UTC, пусть будет так.Вызовите toString для генерации строки в стандартном формате ISO 8601 .

String output = instant.toString();  

2014-11-14T14: 05: 09Z

Для других форматов вам необходимо преобразовать Instant в более гибкий OffsetDateTime.

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );

odt.toString (): 2014-11-14T14:05: 09 + 00: 00

Чтобы получить строку в нужном формате, укажите DateTimeFormatter.Вы можете указать пользовательский формат.Но я бы использовал один из предопределенных форматеров (ISO_LOCAL_DATE_TIME) и заменил T в его выводе пробелом.

String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                   .replace( "T" , " " );

2014-11-14 14: 05: 09

Кстати, я не рекомендую такой формат, когда вы намеренно теряете offset-from-UTC или информацию о часовом поясе.Создает неоднозначность относительно значения даты-времени этой строки.

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

Чтобы увидеть тот же момент через линзу времени настенных часов некоторого конкретного региона , примените ZoneId, чтобы получить ZonedDateTime.

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

zdt.toString (): 2014-11-14T14: 05: 09-05: 00 [Америка / Монреаль]

Чтобы создать форматированную строку, сделайте то же, что и выше, но замените odtс zdt.

String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                   .replace( "T" , " " );

2014-11-14 14: 05: 09

Если вы выполняете этот код очень много раз, вы можете захотетьбыть немного более эффективным и избегать звонка на String::replace.Удаление этого вызова также делает ваш код короче.При желании укажите свой собственный шаблон форматирования в своем собственном объекте DateTimeFormatter.Кэшируйте этот экземпляр как константу или член для повторного использования.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" );  // Data-loss: Dropping any fractional second.

Примените этот форматер, передав экземпляр.

String output = zdt.format( f );

О java.time

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

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

Чтобы узнать больше, см. Oracle Tutorial .И найдите в Stack Overflow множество примеров и объяснений.

Большая часть функциональности java.time перенесена в Java 6 & 7 в ThreeTen-Backport и дополнительно адаптирована для Android in ThreeTenABP (см. Как использовать… ).

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

15 голосов
/ 25 июня 2015

Альтернативные строки в простой старой Java:

String.format("The date: %tY-%tm-%td", date, date, date);

String.format("The date: %1$tY-%1$tm-%1$td", date);

String.format("Time with tz: %tY-%<tm-%<td %<tH:%<tM:%<tS.%<tL%<tz", date);

String.format("The date and time in ISO format: %tF %<tT", date);

При этом используется Форматер и относительное индексирование вместо SimpleDateFormat, что не поточно-ориентировано , кстати.

Чуть более повторяющийся, но требуется всего одно утверждение. Это может быть полезно в некоторых случаях.

9 голосов
/ 14 ноября 2014

Почему бы вам не использовать Joda (org.joda.time.DateTime)? Это в основном однострочник.

Date currentDate = GregorianCalendar.getInstance().getTime();
String output = new DateTime( currentDate ).toString("yyyy-MM-dd HH:mm:ss");

// output: 2014-11-14 14:05:09
7 голосов
/ 16 апреля 2011

Похоже, вы ищете SimpleDateFormat .

Формат: гггг-мм-дд кк: мм: сс

5 голосов
/ 03 февраля 2018

В одном кадре;)

Чтобы получить дату

String date = new SimpleDateFormat("yyyy-MM-dd",   Locale.getDefault()).format(new Date());

Чтобы получить время

String time = new SimpleDateFormat("hh:mm", Locale.getDefault()).format(new Date());

Чтобы получить дату и время

String dateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefaut()).format(new Date());

Удачного кодирования:)

4 голосов
/ 07 октября 2015

Если вам нужно только время с даты, вы можете просто использовать функцию String.

Date test = new Date();
String dayString = test.toString();
String timeString = dayString.substring( 11 , 19 );

Это автоматически сократит временную часть строки и сохранит ее внутри timeString.

4 голосов
/ 31 декабря 2013
public static String formateDate(String dateString) {
    Date date;
    String formattedDate = "";
    try {
        date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss",Locale.getDefault()).parse(dateString);
        formattedDate = new SimpleDateFormat("dd/MM/yyyy",Locale.getDefault()).format(date);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return formattedDate;
}
...