如何在Java中获得字符串格式的时间戳?“yyyy.MM.dd.HH.mm.ss”
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());
这就是我所拥有的,但时间戳()需要一个参数…
如何在Java中获得字符串格式的时间戳?“yyyy.MM.dd.HH.mm.ss”
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());
这就是我所拥有的,但时间戳()需要一个参数…
当前回答
你可以使用java.util.Date代替Timestamp:
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
其他回答
你可以使用以下方法:
new java.sql.Timestamp(System.currentTimeMillis()).getTime()
结果:
1539594988651
取代
new Timestamp();
with
new java.util.Date()
因为Timestamp没有默认构造函数,或者你可以用这个方法:
new Timestamp(System.currentTimeMillis());
使用现代java。时间类(如果您使用Java 8或更新版本)。
String s = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
巴兹尔·布尔克的回答很好。但是太长了。很多人都没有耐心去读它。前3个答案太老了,可能会误导Java新人,所以我为新加入的开发者提供这个简短而现代的答案。希望这个答案可以减少可怕的SimpleDateFormat的使用。
更合适的方法是在构造函数中指定Locale区域作为参数。下面的例子使用了US Locale区域。日期格式对区域设置敏感,并使用区域设置来根据用户所在地区的风俗习惯和约定定制信息(Java Platform SE 7)
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());
博士tl;
只使用现代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" )
) // Returns a `String`.
或者使用JVM当前的默认时区。
ZonedDateTime
.now( ZoneId.systemDefault() )
.format( DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" ) )
java。时间和JDBC 4.2
现代的方法使用java。如上所示的时间类。
如果您的JDBC驱动程序符合JDBC 4.2,您可以直接交换java。时间对象与数据库。使用PreparedStatement::setObject和ResultSet::getObject。
使用java。JDBC 4.2之前的驱动只支持sql
如果您的JDBC驱动程序还不符合JDBC 4.2对java的支持。时间类型时,您必须返回到使用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。时间戳,应该只用于进出数据库的传输。立即转换为java。Java 8及以后版本中的时间类型。
java.time.Instant
java.sql.Timestamp映射到java.time。瞬间,UTC时间轴上的一个时刻。注意添加到旧类中的新转换方法toInstant。
java.sql.Timestamp ts = myResultSet.getTimestamp( … );
Instant instant = ts.toInstant();
时区
应用期望/期望的时区(ZoneId)来获得一个zoneeddatetime。
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年- 20 - t03:26:32 + 05:30。
java。Time类默认使用这些标准格式,因此不需要指定模式。zoneeddatetime类通过附加时区名称(明智的改进)扩展了标准格式。
String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]
转换为java.sql
您可以从java转换。时间返回到java.sql.Timestamp。从zoneeddatetime中提取一个瞬间。
在旧类中添加了新方法,以方便与java之间的转换。时间类。
java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );
关于java.time
java。时间框架内置于Java 8及更高版本中。这些类取代了麻烦的旧遗留日期-时间类,如java.util。日期,日历和简单日期格式。
Joda-Time项目现在处于维护模式,建议迁移到java。时间类。
要了解更多,请参阅Oracle教程。搜索Stack Overflow可以找到很多例子和解释。规范是JSR 310。
你可以交换java。Time对象直接使用数据库。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要java。sql。*类。
从哪里获取java。时间类?
Java SE 8、Java SE 9、Java SE 10、Java SE 11及更高版本——带有捆绑实现的标准Java API的一部分。 Java 9增加了一些小特性并进行了修复。 Java SE 6和Java SE 7 大部分的java。时间功能在ThreeTen-Backport中向后移植到Java 6和7。 安卓 后续版本的Android捆绑实现的java。时间类。 对于早期的Android (<26), ThreeTenABP项目适应ThreeTen-Backport(如上所述)。参见如何使用ThreeTenABP....
ThreeTen-Extra项目扩展了java。额外的课程时间。这个项目是未来可能添加到java.time的一个试验场。你可以在这里找到一些有用的类,比如Interval、YearWeek、YearQuarter等等。