我想从Java日期中获取年,月,日等,以与Java中的公历日期进行比较。这可能吗?

2022-08-31 05:27:47

我在Java中有一个Date对象存储为Java的Date类型。

我还有一个公历创建日期。公历日期没有参数,因此是今天日期(和时间?)的实例。

使用java日期,我希望能够从java日期类型中获取年,月,日,小时,分钟和秒,并比较公历日历日期。

我看到目前Java日期存储为长,唯一可用的方法似乎只是将long写为格式化的日期字符串。有没有办法访问年,月,日等?

我看到类的 、 等方法已被弃用。我想知道使用带有日期的Java Date实例的最佳实践是什么。getYear()getMonth()DateGregorianCalendar

我的最终目标是进行日期计算,以便我可以检查Java日期是否在今天日期和时间的小时,分钟等内。

我仍然是Java的新手,对此感到有些困惑。


答案 1

使用类似如下内容:

Date date; // your date
// Choose time zone in which you want to interpret your Date
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Paris"));
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
// etc.

请注意,月份从 0 开始,而不是 1。

编辑:从Java 8开始,最好使用java.time.LocalDate而不是java.util.Calendar。请参阅此答案以获取操作方法。


答案 2

使用 Java 8 及更高版本,您可以将 Date 对象转换为 LocalDate 对象,然后轻松获取年、月和日。

Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int year  = localDate.getYear();
int month = localDate.getMonthValue();
int day   = localDate.getDayOfMonth();

请注意,返回一个介于 1 到 12 之间的整型值。getMonthValue()