如何在Java中获取字符串格式的当前时间戳?“yyyy.MM.dd.HH.mm.ss“

bkhjykvo  于 2023-03-06  发布在  Java
关注(0)|答案(9)|浏览(167)

如何在Java中获取字符串格式的时间戳?“yyyy.MM.dd.HH.mm.ss“

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

这就是我所拥有的,但是Timestamp()需要一个参数...

l3zydbqr

l3zydbqr1#

替换

new Timestamp();

new java.util.Date()

因为Timestamp没有默认的构造函数,或者你可以用下面的方法来实现:

new Timestamp(System.currentTimeMillis());
fjnneemd

fjnneemd2#

使用java.util.Date类代替时间戳。

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

这将以指定的格式获取当前日期。

2w3rbyxf

2w3rbyxf3#

TL;医生

只使用现代的 * java.time * 类,不要使用糟糕的遗留类,如SimpleDateFormatDatejava.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" )
)                                // Returns a `String`.

或者使用JVM的当前默认时区。

ZonedDateTime
.now( ZoneId.systemDefault() )
.format( DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" ) )

* java. time * 和JDBC 4.2

现代方法使用如上所示的 * java.time * 类。
如果您的JDBC driver符合JDBC 4.2,您可以直接与数据库交换 * java.time * 对象,使用PreparedStatement::setObjectResultSet::getObject

java.sql仅用于JDBC 4.2之前的驱动程序

如果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 8和更高版本中的java. time类型。

java.time.Instant

java.sql.TimestampMap到java.time.Instant(UTC时间线上的一个时刻),注意添加到旧类中的新转换方法toInstant

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

时区

应用所需/预期时区(ZoneId)以获得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 );

这种特殊格式的确切含义不明确,因为它没有任何offset-from-UTC或时区的指示。

ISO 8601标准

如果你有任何发言权,我建议你考虑使用标准的ISO 8601,而不是自己的滚动。标准格式与你的格式非常相似。例如:
2016-02-20T03:26:32+05:30.
time类默认使用这些标准格式,所以不需要指定模式,ZonedDateTime类通过附加时区名称扩展了标准格式(明智的改进)。

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

转换为java.sql

您可以将java.time转换回java.sql.Timestamp,从ZonedDateTime中提取一个Instant
旧类中添加了新方法,以便于与java. time类之间的转换。

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

大约 * java.时间 *

java.time框架内置于Java 8及更高版本中,这些类取代了麻烦的旧legacy日期-时间类,如java.util.DateCalendarSimpleDateFormat
Joda-Time项目(现在在maintenance mode中)建议迁移到java.time类。
要了解更多信息,请参阅Oracle Tutorial。并搜索堆栈溢出以获取许多示例和说明。规范是JSR 310
您可以直接与数据库交换 * java. time * 对象。使用与JDBC 4.2兼容的JDBC driver或更高版本。不需要字符串,也不需要java.sql.*类。
从哪里获得java. time类?

      • Java SE 8**、Java SE 9Java SE 10Java SE 11及更高版本-标准Java API的一部分,具有捆绑的实现。
  • Java 9添加了一些次要特性和修复。
      • Java SE 6Java SE 7**
    • java. time * 的大部分功能都在ThreeTen-Backport中向后移植到Java 6和7。
  • Android
  • 较新版本的Android捆绑了 * java. time * 类的实现。
  • 对于早期的Android(〈26),ThreeTenABP项目会对ThreeTen-Backport进行调整(如上所述)。

ThreeTen-Extra项目用额外的类扩展了java.time。这个项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuartermore

cmssoen2

cmssoen24#

您可以使用java.util.Date代替时间戳:

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

1cklez4t5#

如果使用java 8或更新版本,请使用现代的java.time类。

String s = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());

Basil Bourque的答案很不错。但是太长了。很多人都没有耐心去读它。前三个答案太老了,可能会误导Java新手。所以我给新来的开发者提供了这个简短而现代的答案。希望这个答案可以减少可怕的SimpleDateFormat的使用。

yruzcnhs

yruzcnhs6#

您可以使用以下方法:

new java.sql.Timestamp(System.currentTimeMillis()).getTime()

结果:

1539594988651
pkln4tw6

pkln4tw67#

更合适的方法是将Locale区域指定为构造函数中的参数。下面的示例使用US Locale区域。日期格式区分区域设置,并使用Locale定制与用户区域Locale (Java Platform SE 7)的习惯和约定相关的信息

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

uubf1zoe8#

我在用这个

String timeStamp = new SimpleDateFormat("dd/MM/yyyy_HH:mm:ss").format(Calendar.getInstance().getTime());
System.out.println(timeStamp);
jhkqcmku

jhkqcmku9#

使用以下策略。

import java.sql.Timestamp;

Timestamp today = new Timestamp(System.currentTimeMillis())

相关问题