Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中从年龄查找出生日期_Java_Date - Fatal编程技术网

在java中从年龄查找出生日期

在java中从年龄查找出生日期,java,date,Java,Date,大家好,我正在创建一个程序,用于查找给出确切年龄的出生日期。例如,如果一名男子的年龄为21岁10个月零22天(截至当前日期),我如何才能找到确切的出生日期。如果有人帮我做isuue,我会很感激的 我试过的就在这里 这里d、m和y是天、月和年的文本字段 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

大家好,我正在创建一个程序,用于查找给出确切年龄的出生日期。例如,如果一名男子的年龄为21岁10个月零22天(截至当前日期),我如何才能找到确切的出生日期。如果有人帮我做isuue,我会很感激的

我试过的就在这里

这里d、m和y是天、月和年的文本字段

  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            int da = Integer.parseInt(d.getText());
            da = -da;
            int mo = Integer.parseInt(m.getText());
            mo = -mo;        
            int ye = Integer.parseInt(y.getText());
            ye = -ye;
            SimpleDateFormat ddd = new SimpleDateFormat("dd");
            SimpleDateFormat mmm = new SimpleDateFormat("MM");
            SimpleDateFormat yyy = new SimpleDateFormat("yyyy");
            Calendar cal = Calendar.getInstance();                       
            cal.getTime();
            cal.add(Calendar.DATE, da);
             cal.set(Integer.parseInt(yyy.format(cal.getTime())), Integer.parseInt(mmm.format(cal.getTime())), Integer.parseInt(ddd.format(cal.getTime())));
            cal.add(cal.MONTH, mo);cal.set(Integer.parseInt(yyy.format(cal.getTime())), Integer.parseInt(mmm.format(cal.getTime())), Integer.parseInt(ddd.format(cal.getTime())));
            cal.add(cal.YEAR, ye);
            System.out.println(getDate(cal));
        }
我的问题是,如果我输入21岁10个月22天作为一个人的年龄,编译器给出的日期是1992年12月18日,但实际日期应该是1992年10月17日。
请帮我解决这个问题。

你先减去天数,然后减去月份,最后减去年份。在我看来,这是错误的,因为你不知道这些年里可能有多少闰年

    int da = 22;
    int mo = 10;
    int ye = 21;

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.YEAR, -ye);
    cal.add(Calendar.MONTH, -mo);
    cal.add(Calendar.DAY_OF_YEAR, -da);

    System.out.println(cal.getTime());
试一试

Calendar cal = Calendar.getInstance();                       
cal.add(Calendar.YEAR, ye);   
cal.add(Calendar.MONTH, mo);  
cal.add(Calendar.DAY_OF_MONTH, da); 

这样做我得到:Sun Oct 18 11:24:52 CET 1992

以下是Java 8解决方案的实现者:


输出:
18/10/1992

不要重新发明轮子。使用合适的日期时间库进行日期时间工作

乔达时间 使用Joda Time,您可以在两行易于阅读的代码中完成任务

时间跨度 该库支持定义时间跨度。提供三个类:间隔、周期和持续时间。为此,我们需要

ISO 8601 Joda Time在解析/生成字符串时使用该标准作为其默认值。该标准通过以下方式定义了该格式(Joda Time称之为Period):
PnYnMnDTnHnMnS
P
启动每个实例,而
T
将日期部分与时间部分分开。您可以使用这种字符串来构造Period对象,也可以传递年、月、日等的数字

时区 如果您想要更精确,您应该指定年、月、日计数所需的时区。由于日期取决于时区,结果可能会因日期而异。新的一天在巴黎比在蒙特勒尔来得早

示例代码 Joda Time 2.4中的示例代码

LocalDate now = LocalDate.now( DateTimeZone.forID( "America/Montreal" ) );
Period age = new Period( "P21Y10M22D" ); // 21 years, 10 months, and 22 days. Or: new Period( 21, 10, 22…
LocalDate birth = now.minus( age );
转储到控制台

System.out.println( "now: " + now );
System.out.println( "age: " + age );
System.out.println( "birth: " + birth );
跑步的时候

现在:2014-09-10
年龄:P21Y10M22D
出生日期:1992年10月19日

Related:月份从0到11英寸Calendar@AkshaiKumar请澄清您的问题,在顶部给出一个数据示例,在底部给出另一个数据示例。因此,在他们使用的数据示例中,答案各不相同,造成了混乱。并包括您在确定预期结果时使用的“今天的日期”,以便我们进行比较。您能帮我设置从cal.getTime()到jDateChooser的日期吗。我已经试过了,但没用。java.util.Date Date=新的SimpleDataFormat(“dd-MM-yyyy”).parse(cal.getTime().toString());jDateChooser1.setDate(日期);jDateChooser有什么类型?
System.out.println( "now: " + now );
System.out.println( "age: " + age );
System.out.println( "birth: " + birth );