如何在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()需要一个参数...
Answers:
使用java.util.Date
类而不是时间戳。
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
这将为您提供指定格式的当前日期。
new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())
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" )
) // Returns a `String`.
或使用JVM的当前默认时区。
ZonedDateTime
.now( ZoneId.systemDefault() )
.format( 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 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格式,而不要自己动手使用。标准格式与您的格式非常相似。例如: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教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC驱动程序。不需要字符串,不需要类。java.sql.*
在哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。你可能在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,和更多。
一种更合适的方法是在构造函数中将Locale区域指定为参数。下面的示例使用美国区域设置区域。日期格式是对语言环境敏感的,并使用语言环境来定制与用户区域语言环境的习惯和约定有关的信息(Java Platform SE 7)
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());