从日历中获取日期前 18 年

Posted

技术标签:

【中文标题】从日历中获取日期前 18 年【英文标题】:Getting 18 years before date from calender 【发布时间】:2015-09-14 03:50:36 【问题描述】:

我需要得到完整的日期(dd/mm/yyyy),即 18 年后。我用代码作为 日历计算 = Calendar.getInstance(); calc.add(Calendar.YEAR, -18);它检索年份之前的 18 年而不是月份或日期。即使在像任何一个月的第一天这样的极端情况下,我也需要在当前日期前 18 年的一天。示例 1-06-2015 是当前日期应该是 31-05-1997。需要注意的是我需要 java6 中的代码

【问题讨论】:

calc = Calendar.getInstance();calc.add(Calendar.YEAR, -18);calc.add(Calendar.DATE, -1);Date date = calc.getTime();System.out.println(new SimpleDateFormat("dd/MM/yyyy").format(date)"); 如果可能的话,您应该利用 Java 8 的新 Time API 或 Joda-Time,它们通常比Calendar 更容易且不那么混乱@ @MadProgrammer 上面的代码可以工作,但在像本月 1 日这样的极端情况下,这将不起作用 应该做的,有没有不做的例子 在生日年龄确认中。我需要注册18岁以上的用户。 【参考方案1】:

在 Java 中,日期值只是从某个固定时间点开始的毫秒数,相关的类没有自己可以更改的格式,这就是日期/时间格式化程序的用途

日历

从您的示例中,您基本上忽略了这样一个事实,即更改 Calendar 的任何字段都会影响所有其他字段,例如...

Calendar cal = Calendar.getInstance();
cal.set(2015, Calendar.JUNE, 01); // Comment this out for today...
cal.add(Calendar.YEAR, -18);
cal.add(Calendar.DATE, -1);
Date date = cal.getTime();
System.out.println(new SimpleDateFormat("dd/MM/yyyy").format(date));

哪些输出

31/05/1997

不过,我建议使用 Java 8 的新 Time API 或 Joda-Time

Java 8 时间 API

LocalDate ld = LocalDate.now();
ld = ld.minusYears(18).minusDays(1);
System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy").format(ld));

哪些输出

26/06/1997

边缘情况...

LocalDate ld = LocalDate.of(2015, Month.JUNE, 1);
ld = ld.minusYears(18).minusDays(1);
System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy").format(ld));

哪些输出

31/05/1997

乔达时间

LocalDate ld = new LocalDate();
ld = ld.minusYears(18).minusDays(1);
System.out.println(DateTimeFormat.forPattern("dd/MM/yyyy").print(ld));

哪些输出

26/06/1997

边缘情况...

LocalDate ld = new LocalDate(2015, DateTimeConstants.JUNE, 1);
ld = ld.minusYears(18).minusDays(1);
System.out.println(DateTimeFormat.forPattern("dd/MM/yyyy").print(ld));

哪些输出

31/05/1997

【讨论】:

【参考方案2】:

我建议使用Joda Time,因为它会使日期操作和数学变得非常容易。例如:

DateTime futureDate = new DateTime();
futureDate.minusYears(18).minusDays(1);
futureDate.toDate(); // return a regular Date object

【讨论】:

-18 年,-1 天,但想法正确。添加一个 Java 8 Time 示例,获得支持(我不是很挑剔)。您可能还想强调一下 OP 目前做错了什么;) @MUHAMMEDSHAMEER 然后使用 JodaTime。此外,其他可能遇到此问题的人可能有幸拥有 Java 8 Joda Time 只需要 v.2.0 的 JDK 1.5+,如 here 所示,正如 MadProgrammer 在下面向我们展示的那样......它在易用性方面是明显的赢家。 我们使用的是 java 6 而不是 java 8,所以我们不能使用 joda 8 Joda 仍然是 2.x,正如我所说的可用于 java 6

以上是关于从日历中获取日期前 18 年的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iOS swift 中的日期获取 1 小时前?

我无法从引导日历中获取日期值

通过日期选择器日历从选定日期获取数据

如何从日历 eonasdan 获取当前选定日期的值

java 怎么获取一个月的日期

java - 如何从Java日历中获取指定周的星期六日期? [关闭]