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`.
9条答案
按热度按时间l3zydbqr1#
替换
与
因为
Timestamp
没有默认的构造函数,或者你可以用下面的方法来实现:fjnneemd2#
使用
java.util.Date
类代替时间戳。这将以指定的格式获取当前日期。
2w3rbyxf3#
TL;医生
只使用现代的 * java.time * 类,不要使用糟糕的遗留类,如
SimpleDateFormat
、Date
或java.sql.Timestamp
。或者使用JVM的当前默认时区。
* java. time * 和JDBC 4.2
现代方法使用如上所示的 * java.time * 类。
如果您的JDBC driver符合JDBC 4.2,您可以直接与数据库交换 * java.time * 对象,使用
PreparedStatement::setObject
和ResultSet::getObject
。java.sql仅用于JDBC 4.2之前的驱动程序
如果JDBC驱动程序还不符合JDBC 4.2对 * java. time * 类型的支持,则必须回退到使用java.sql类。
存储数据。
检索数据。
java.sql类型(如
java.sql.Timestamp
)只能用于传入和传出数据库。立即转换为Java 8和更高版本中的java. time类型。java.time.Instant
java.sql.Timestamp
Map到java.time.Instant
(UTC时间线上的一个时刻),注意添加到旧类中的新转换方法toInstant
。时区
应用所需/预期时区(
ZoneId
)以获得ZonedDateTime
。格式化字符串
使用一个
DateTimeFormatter
来生成你的字符串。模式代码类似于java.text.SimpleDateFormat
,但并不完全相同,所以请仔细阅读文档。这种特殊格式的确切含义不明确,因为它没有任何offset-from-UTC或时区的指示。
ISO 8601标准
如果你有任何发言权,我建议你考虑使用标准的ISO 8601,而不是自己的滚动。标准格式与你的格式非常相似。例如:
2016-02-20T03:26:32+05:30
.time类默认使用这些标准格式,所以不需要指定模式,
ZonedDateTime
类通过附加时区名称扩展了标准格式(明智的改进)。转换为java.sql
您可以将java.time转换回
java.sql.Timestamp
,从ZonedDateTime
中提取一个Instant
。旧类中添加了新方法,以便于与java. time类之间的转换。
大约 * java.时间 *
java.time框架内置于Java 8及更高版本中,这些类取代了麻烦的旧legacy日期-时间类,如
java.util.Date
、Calendar
和SimpleDateFormat
。Joda-Time项目(现在在maintenance mode中)建议迁移到java.time类。
要了解更多信息,请参阅Oracle Tutorial。并搜索堆栈溢出以获取许多示例和说明。规范是JSR 310。
您可以直接与数据库交换 * java. time * 对象。使用与JDBC 4.2兼容的JDBC driver或更高版本。不需要字符串,也不需要
java.sql.*
类。从哪里获得java. time类?
ThreeTen-Extra项目用额外的类扩展了java.time。这个项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,如
Interval
、YearWeek
、YearQuarter
和more。cmssoen24#
您可以使用java.util.Date代替时间戳:
1cklez4t5#
如果使用java 8或更新版本,请使用现代的
java.time
类。Basil Bourque的答案很不错。但是太长了。很多人都没有耐心去读它。前三个答案太老了,可能会误导Java新手。所以我给新来的开发者提供了这个简短而现代的答案。希望这个答案可以减少可怕的
SimpleDateFormat
的使用。yruzcnhs6#
您可以使用以下方法:
结果:
pkln4tw67#
更合适的方法是将Locale区域指定为构造函数中的参数。下面的示例使用US Locale区域。日期格式区分区域设置,并使用Locale定制与用户区域Locale (Java Platform SE 7)的习惯和约定相关的信息
uubf1zoe8#
我在用这个
jhkqcmku9#
使用以下策略。