在通过assylias答案和按JB Nizet答案都是正确的:
- 调用添加到旧类中的新转换方法,
java.util.Date::toInstant
。
- 呼叫
Instant::atZone
,传递ZoneId
,导致ZonedDateTime
。
但是您的代码示例针对的是四分之一。为此,请继续阅读。
宿舍
无需自己动手处理宿舍。使用已经编写和测试的类。
org.threeten.extra.YearQuarter
该java.time类由扩展ThreeTen-EXTRA项目。在该库中提供的许多方便的类中,您将找到Quarter
和YearQuarter
。
首先得到你的ZonedDateTime
。
ZonedId z = ZoneID.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = myJavaUtilDate.toInstant().atZone( z ) ;
确定该特定日期的年度季度。
YearQuarter yq = YearQuarter.from( zdt ) ;
接下来,我们需要该季度的开始日期。
LocalDate quarterStart = yq.atDay( 1 ) ;
尽管我不一定建议这样做,但是您可以使用一行代码而不是实现一个方法。
LocalDate quarterStart =
YearQuarter
.from(
myJavaUtilDate
.toInstant()
.atZone(
ZoneID.of( "Africa/Tunis" )
)
)
.atDay( 1 )
;
顺便说一句,如果您可以java.util.Date
完全淘汰使用方式,请这样做。这是一个可怕的职业,还有其兄弟姐妹Calendar
。Date
当您与尚未更新为java.time的旧代码连接时,仅在必须使用的地方使用。
关于java.time
该java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date
,Calendar
,和SimpleDateFormat
。
要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC驱动程序。不需要字符串,不需要类。java.sql.*
在哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容打下了基础。你可能在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,和更多。