如何在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());

这就是我所拥有的,但时间戳()需要一个参数…

754321 次浏览

取代

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());

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

你可以使用java.util.Date代替Timestamp:

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

更合适的方法是在构造函数中指定Locale区域作为参数。下面的例子使用了US Locale区域。日期格式化是区域设置敏感的,并使用区域设置来定制相对于用户所在地区语言环境(Java Platform SE 7)的习俗和惯例的信息

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new 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

使用java。JDBC 4.2之前的驱动只支持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。Java 8及以后版本中的时间类型。

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 );

这种特殊的格式对于其确切的含义是模棱两可的,因为它缺乏任何offset-from-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转换。时间回到java.sql.Timestamp。从ZonedDateTime中提取Instant

在旧类中添加了新方法,以方便与java之间的转换。时间类。

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

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


关于java.time

< em > java.time < / em >框架内置于Java 8及更高版本中。这些类取代了麻烦的旧遗产日期-时间类,如java.util.DateCalendar, &SimpleDateFormat

现在在维护模式中的< em > Joda-Time < / em >项目建议迁移到java.time类。

要了解更多信息,请参见< < em >甲骨文教程/ em >。搜索Stack Overflow可以找到很多例子和解释。规格是JSR 310

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

从哪里获取java。时间类?

< >强ThreeTen-Extra < / >强项目扩展了java。额外的课程时间。这个项目是未来可能添加到java.time的一个试验场。你可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter更多的

你可以使用以下方法:

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

结果:

1539594988651

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

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

巴兹尔·布尔克的回答很好。但是太长了。很多人都没有耐心去读它。前3个答案太老了,可能会误导Java新人,所以我为新加入的开发者提供这个简短而现代的答案。希望这个答案可以减少可怕的SimpleDateFormat的使用。

我在用这个

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