Как получить временную метку в строчном формате в Java? "Yyyy.MM.dd.HH.mm.ss"
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());
Это то, что у меня есть, но Timestamp() требует параметров...
Как получить временную метку в строчном формате в Java? "Yyyy.MM.dd.HH.mm.ss"
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());
Это то, что у меня есть, но Timestamp() требует параметров...
Заменить
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.util.Date вместо отметки времени:
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
Используйте только современные классы java.time. Никогда не используйте ужасные унаследованные классы, такие как 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.time, как показано выше.
Если ваш драйвер JDBC соответствует JDBC 4.2, вы можете напрямую обмениваться объектами java.time с базой данных. Используйте PreparedStatement::setObject
и ResultSet::getObject
.
Если ваш драйвер JDBC еще не соответствует JDBC 4.2 для поддержки типов java.time, вы должны использовать классы java.sql.
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ; // Capture the current moment in UTC.
myPreparedStatement.setObject( … , odt ) ;
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
Типы java.sql, такие как java.sql.Timestamp
, должны использоваться только для передачи в базу данных и из java.sql.Timestamp
. Немедленно конвертируйте в java.time типы в Java 8 и более поздних версиях.
java.time.Instant
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, а не использовать свои собственные. Стандартный формат очень похож на ваш. Например: 2016-02-20T03:26:32+05:30
.
Классы java.time по умолчанию используют эти стандартные форматы, поэтому не нужно указывать шаблон. Класс ZonedDateTime
расширяет стандартный формат, добавляя имя часового пояса (мудрое улучшение).
String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]
Вы можете конвертировать из java.time обратно в java.sql.Timestamp
. Извлечь Instant
из ZonedDateTime
.
Новые методы были добавлены в старые классы, чтобы облегчить преобразование в/из классов java.time.
java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );
Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытеснять неприятные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, и SimpleDateFormat
.
Проект Joda-Time, находящийся сейчас в режиме обслуживания, рекомендует перейти на классы java.time.
Чтобы узнать больше, смотрите Oracle Tutorial. И поиск для многих примеров и объяснений. Спецификация JSR 310.
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
.
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и другие.
Более подходящий подход заключается в том, чтобы указать область Locale в качестве параметра в конструкторе. В приведенном ниже примере используется региональный регион США. Форматирование даты зависит от локали и использует локаль для настройки информации относительно таможни и условных обозначений пользовательского региона. Locale (платформа Java SE 7)
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());
Вы можете использовать следующее
new java.sql.Timestamp(System.currentTimeMillis()).getTime()
Result : 1539594988651
Надеюсь, это поможет. Просто мое предложение, а не за бонусные баллы.
Используйте код ниже, чтобы получить текущие метки времени:
Timestamp ts = new Timestamp(date.getTime());
Для справки