繁体   English   中英

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

[英]How to get current timestamp in string format in Java? "yyyy.MM.dd.HH.mm.ss"

如何在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类而不是 Timestamp。

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

这将为您提供指定格式的当前日期。

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 驱动程序符合JDBC 4.2 ,您可以直接与数据库交换java.time对象。 使用PreparedStatement::setObjectResultSet::getObject

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

如果您的 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.Timestamp映射到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 );

这种特定格式的确切含义是模棱两可的,因为它没有任何与 UTC 或时区偏移的指示。

ISO 8601

如果您对此事有任何发言权,我建议您考虑使用标准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.sql

您可以从 java.time 转换回java.sql.Timestamp ZonedDateTime中提取一个Instant

新方法已添加到旧类中,以促进与 java.time 类之间的转换。

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

Java(传统和现代)和标准 SQL 中的日期时间类型表


关于java.time

java.time框架内置于 Java 8 及更高版本中。 这些类取代了麻烦的日期时间类,例如java.util.DateCalendarSimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle 教程 并在 Stack Overflow 上搜索许多示例和解释。 规范是JSR 310

您可以直接与您的数据库交换java.time对象。 使用符合JDBC 4.2或更高版本的JDBC 驱动程序 不需要字符串,不需要java.sql.*类。

从哪里获得 java.time 类?

ThreeTen-Extra项目通过附加类扩展了 java.time。 该项目是未来可能添加到 java.time 的试验场。 您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuarter等等

您可以使用 java.util.Date 而不是 Timestamp :

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

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

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

Basil Bourque 的回答非常好。 但是太长了。 很多人都没有耐心读下去。 前 3 个答案太老了,可能会误导 Java 新手。所以我为新来的开发人员提供了这个简短而现代的答案。 希望这个答案可以减少可怕的SimpleDateFormat的使用。

您可以使用以下内容:

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

结果:

1539594988651

更合适的方法是在构造函数中指定一个 Locale 区域作为参数。 下面的示例使用美国语言环境区域。 日期格式对区域设置敏感,并使用区域设置来定制与用户区域区域设置(Java 平台 SE 7)的习俗和约定相关的信息

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

我正在使用这个

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

如果你的日期就像 let mydate = "2022-15-06";

让 newDate = Date.now(mydate)

现在在 newDate 你有当前的时间戳

使用以下代码获取当前时间戳:

Timestamp ts = new Timestamp(date.getTime());

以供参考

如何使用Java获取当前时间戳

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM