Java 从日历日期开始提前18年
我需要得到完整的日期(dd/mm/yyyy),从现在起18年。我使用代码作为 Calendar calc=Calendar.getInstance();计算添加(日历年,-18);在年前18年,而不是月份或日期。我需要比当前日期早18年的一天,即使是像任何月份的第一天这样的极端情况。示例1-06-2015是当前日期应为1997年5月31日。需要注意的是,我需要java6中的代码,我建议使用,因为它将使日期操作和数学变得非常简单。例如:Java 从日历日期开始提前18年,java,datetime,datepicker,Java,Datetime,Datepicker,我需要得到完整的日期(dd/mm/yyyy),从现在起18年。我使用代码作为 Calendar calc=Calendar.getInstance();计算添加(日历年,-18);在年前18年,而不是月份或日期。我需要比当前日期早18年的一天,即使是像任何月份的第一天这样的极端情况。示例1-06-2015是当前日期应为1997年5月31日。需要注意的是,我需要java6中的代码,我建议使用,因为它将使日期操作和数学变得非常简单。例如: DateTime futureDate = new Date
DateTime futureDate = new DateTime();
futureDate.minusYears(18).minusDays(1);
futureDate.toDate(); // return a regular Date object
我建议使用,因为它将使日期操作和数学变得非常简单。例如:
DateTime futureDate = new DateTime();
futureDate.minusYears(18).minusDays(1);
futureDate.toDate(); // return a regular Date object
在Java中,日期值只是从某个固定时间点算起的毫秒数,相关类没有自己可以更改的格式,这就是日期/时间格式化程序的用途 日历 从您的示例中,您基本上忽略了这样一个事实,即更改
日历的任何字段都会影响所有其他字段,例如
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
26/06/1997
31/05/1997
26/06/1997
31/05/1997
然而,我建议使用Java8的新时间API或Joda时间
Java8时间API
哪个输出
31/05/1997
26/06/1997
31/05/1997
26/06/1997
31/05/1997
边缘案例。。。
哪个输出
31/05/1997
26/06/1997
31/05/1997
26/06/1997
31/05/1997
乔达蒂姆
哪个输出
31/05/1997
26/06/1997
31/05/1997
26/06/1997
31/05/1997
边缘案例。。。
哪个输出
31/05/1997
26/06/1997
31/05/1997
26/06/1997
31/05/1997
在Java中,日期值只是从某个固定时间点算起的毫秒数,相关类没有自己可以更改的格式,这就是日期/时间格式化程序的用途
日历
从您的示例中,您基本上忽略了这样一个事实,即更改日历的任何字段都会影响所有其他字段,例如
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
26/06/1997
31/05/1997
26/06/1997
31/05/1997
然而,我建议使用Java8的新时间API或Joda时间
Java8时间API
哪个输出
31/05/1997
26/06/1997
31/05/1997
26/06/1997
31/05/1997
边缘案例。。。
哪个输出
31/05/1997
26/06/1997
31/05/1997
26/06/1997
31/05/1997
乔达蒂姆
哪个输出
31/05/1997
26/06/1997
31/05/1997
26/06/1997
31/05/1997
边缘案例。。。
哪个输出
31/05/1997
26/06/1997
31/05/1997
26/06/1997
31/05/1997
calc=Calendar.getInstance()代码>计算添加(日历年,-18)代码>calc.add(Calendar.DATE,-1)代码>Date-Date=calc.getTime()代码>System.out.println(新的SimpleDataFormat(“dd/MM/yyyy”).format(日期)”)
如果可能的话,你应该利用Java 8的新时间API或Joda Time,它们通常比日历更简单,也不那么凌乱。上面的代码可以工作,但在像月1日这样的极端情况下,这不应该工作,你有没有一个例子说明它不能确认出生日期。我需要注册18岁以上的用户。calc=Calendar.getInstance();
calc.add(Calendar.YEAR,-18);
calc.add(Calendar.DATE,-1);
DATE-DATE=calc.getTime();
System.out.println(新的简化格式(“dd/MM/yyyy”).format(DATE)”
如果可能的话,你应该利用Java 8的新时间API或Joda Time,它们通常比日历更简单,也不那么凌乱。上面的代码可以工作,但在像月1日这样的极端情况下,这不应该工作,你有没有一个例子,它不能确认出生日期。我需要注册用户超过18岁。这是-18岁,-1天,但正确的想法。添加一个Java8时间示例,赢得一张赞成票(挑剔的不是我)。您可能还希望强调OP目前的错误;)@然后,穆罕默德·沙默使用约达梯姆。此外,其他可能有这个问题的人可能很幸运,Java 8Joda Time只需要JDK 1.5+for v.2.0,正如MadProgrammer在下面向我们展示的那样。。。它在易用性方面显然是赢家。我们使用的是java 6而不是java 8,所以我们不能使用joda 8Joda仍然是2.x,正如我所说的,java 6的可用性是-18年-1天,但这是正确的想法。添加一个Java8时间示例,赢得一张赞成票(挑剔的不是我)。您可能还希望强调OP目前的错误;)@然后,穆罕默德·沙默使用约达梯姆。此外,其他可能有这个问题的人可能很幸运,Java 8Joda Time只需要JDK 1.5+for v.2.0,正如MadProgrammer在下面向我们展示的那样。。。我们使用的是Java6而不是Java8,所以我们不能使用Joda8Joda仍然是2.x,正如我所说的,Java6是可用的