获取Java日期或日历的时间部分

马特·鲍尔(Matt Ball):

是否有一种简单或优雅的方法来仅捕获Java日期(或日历,这对我来说真的不重要)的一天中的时间(小时/分钟/秒/秒/毫秒)?我正在寻找一种单独考虑日期(年/月/日)和时间部分的好方法,但是据我所知,我坚持分别访问每个字段。

我知道我可以编写自己的方法来单独获取我感兴趣的字段,但是我会将其作为静态实用程序方法来进行处理,这很丑陋。另外,我知道Date和Calendar对象具有毫秒精度,但是在两种情况下我都无法访问毫秒组件。


编辑:我不清楚这一点:使用Date :: getTime()或Calendar :: getTimeInMillis之一对我来说并不是非常有用,因为它们返回自历元以来的毫秒数(由该Date或Calendar表示) ,实际上并不会将一天中时间与其余信息分开

我认为,@ Jherico的答案是最接近的答案,但绝对是我仍然必须将其转化为我自己编写的方法的东西。这并不是我要的目的,因为它仍然包含返回的毫秒值中的小时,分​​钟和秒,尽管我可以使它满足我的目的。

我仍然认为每个组件都是独立的,尽管它们并不是分开的您可以将时间写为自任意参考日期以来的毫秒数,也可以将时间写为与完全相同的时间year/month/day hours:minutes:seconds.milliseconds

这不是出于显示目的。我知道如何使用DateFormat来制作漂亮的日期字符串。


编辑2:我最初的问题源于我发现自己编写的一小套实用程序函数-例如:

  • 检查两个Dates 是否表示同一天的日期时间;
  • 检查日期是否在其他两个日期指定的范围内,但有时会根据时间成分进行包含性检查,有时则不会。

Joda Time是否具有这种功能?


编辑3: @Jon关于我的第二个要求的问题,只是为了澄清:第二个要求是使用我的日期有时表示整天的结果-时间部分根本没有关系-有时表示日期时间( IMO,是包含year/month/day 的最准确的词hours:minutes:seconds:...

当日期表示一整天时,其时间部分为零(例如,日期的“时间部分”为午夜),但语义表明范围检查应在结束日期进行。因为我只是将此检查保留在Date :: before和Date :: after之前,所以我必须在结束日期前加上1天-因此,当Date的一天中的时间部分为零时,将使用特殊格式。

希望这不会使事情变得不清楚。

乔恩·斯基特(Jon Skeet):

好的,我知道这是可以预见的答案,但是...使用Joda Time它具有“日期”,“即时”,“一天中的时间”等不同的表示形式。它比内置类IMO具有更丰富的API和更精简的API。

如果这是您仅对日期/时间操作感兴趣的部分,则可能会过大...但是,如果您将内置的日期/时间API用于重要的事情,我强烈建议您移开尽快离开它到乔达。

顺便说Calendar一句,您应该考虑您感兴趣的时区。A 具有关联的时区,而a Date没有关联(它仅表示一个瞬时时间,以从Unix纪元开始的毫秒数为单位)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章