获取 Java 日期或日历的时间组件
有没有一种简单或优雅的方法可以只获取Java日期(或日历,这对我来说真的无关紧要)的一天中的时间(小时/分钟/秒/毫秒)部分?我正在寻找一种很好的方式来分别考虑日期(年/月/日)和时间部分,但据我所知,我只能单独访问每个字段。
我知道我可以编写自己的方法来单独获取我感兴趣的字段,但是我会把它作为静态效用方法来做,这很丑陋。另外,我知道 Date 和 Calendar 对象具有毫秒级精度,但在这两种情况下,我都看不到访问毫秒组件的方法。
编辑:我不清楚这一点:使用Date::getTime()或Calendline::getTimeInMillis之一对我来说并不是很有用,因为它们返回自纪元以来的毫秒数(由该日期或日历表示),这实际上并没有将一天中的时间与其他信息分开。
我认为@Jherico的答案是最接近的,但绝对是我仍然必须加入我自己写的方法。这并不是我想要的,因为它仍然包括返回的毫秒值中的小时,分钟和秒 - 尽管我可能会让它为我的目的工作。
我仍然认为每个组件都是独立的,尽管当然它们不是。可以将时间写为自任意引用日期以来的毫秒数,也可以将时间写为 与 完全相同的时间。year/month/day hours:minutes:seconds.milliseconds
这不用于显示目的。我知道如何使用a来制作漂亮的日期字符串。DateFormat
编辑 2:我最初的问题来自我发现自己编写的一小组实用程序函数 - 例如:
- 检查两个 s 是否表示同一天的日期时间;
Date
- 检查日期是否在由其他两个日期指定的范围内,但有时检查(包括),有时不检查,具体取决于时间分量。
Joda Time有这种类型的功能吗?
编辑3:@Jon关于我的第二个要求的问题,只是为了澄清:第二个要求是使用我的日期有时表示一整天的结果 - 其中时间部分根本不重要 - 有时表示日期时间(即IMO,包含和的最准确的单词)。year/month/day
hours:minutes:seconds:...
当日期表示一整天时,其时间部分为零(例如,日期的“时间分量”为午夜),但语义规定范围检查在结束日期完成。因为我只是将此检查保留为 Date::before 和 Date::after,因此我必须在结束日期中添加 1 天 - 因此,当日期的时间部分为零时,需要特殊大小写。
希望这不会让事情变得不那么清楚。