Как получить текущую метку времени в строковом формате в Java? "гггг.Мм. ДД.Чч.мм. СС"

Как получить метку времени в формате строки в Java? "гггг.Мм. ДД.Чч.мм. СС"

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());

Это то, что у меня есть, но Timestamp() требует параметров...

5 ответов


заменить

new Timestamp();

С

new java.util.Date()

потому что нет конструктора по умолчанию для Timestamp, или вы можете сделать это с метод:

new Timestamp(System.currentTimeMillis());

использовать java.util.Date класс вместо метки времени.

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

это даст вам текущую дату в указанном формате.


вы можете использовать java.утиль.Дата вместо метки времени:

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

tl; dr

используем только современные java.время классы. Никогда не используйте ужасные устаревшие классы, такие как SimpleDateFormat, Date или java.sql.Timestamp.

ZonedDateTime                    // Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone).
.now(                            // Capture the current moment.
    ZoneId.of( "Africa/Tunis" )  // Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST. 
)                                // Returns a `ZonedDateTime` object. 
.format(                         // Generate a `String` object containing text representing the value of our date-time object. 
    DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" )
)

используйте java.sql только для передачи базы данных

java.типы SQL, такие как java.sql.Timestamp, должен использоваться только для передачи В и из базы данных. Немедленно конвертируйте в java.время в Java 8 и выше.

java.time.Instant

A java.sql.Timestamp карты к java.time.Instant, момент на временной шкале в UTC.

java.sql.Timestamp ts = myResultSet.getTimestamp( … );
Instant instant = ts.toInstant(); 

Часовой Пояс

применить желаемый/ожидаемый часовой пояс, чтобы получить ZonedDateTime.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Отформатированные Строки

использовать DateTimeFormatter создать строки. Коды шаблонов аналогичны кодам java.text.SimpleDateFormat но не совсем, поэтому внимательно прочитайте док.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" );
String output = zdt.format( formatter );

этот конкретный формат неоднозначен в отношении его точный смысл, поскольку он не имеет никакого указания смещение от-UTC или часового пояса.

ISO 8601

если у вас есть какие-либо сказать в этом вопросе, я предлагаю вам рассмотреть возможность использования стандартных ISO 8601 форматы, а не свертывать ваши собственные. Стандартный формат очень похож на ваш. Например:
2016-02-20T03:26:32+05:30.

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

String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]

преобразовать в java.в SQL

вы можете конвертировать из Java.время назад в java.sql.Timestamp. Извлечь Instant С ZonedDateTime.

новые методы были добавлены к старым классам, чтобы облегчить преобразование в / из java.классы время.

java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );

более подходящим подходом является указание области локали в качестве параметра в конструкторе. В приведенном ниже примере используется языковой регион США. Форматирование даты зависит от локали и использует Локаль для настройки информации относительно обычаев и соглашений региона пользователя Локаль (платформа Java SE 7)

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());