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
Date 有没有办法计算出生年份,以年为单位的年龄和当前的日期和月份是相同的出生日期和月份_Date_Java 8_Controller_Dob - Fatal编程技术网

Date 有没有办法计算出生年份,以年为单位的年龄和当前的日期和月份是相同的出生日期和月份

Date 有没有办法计算出生年份,以年为单位的年龄和当前的日期和月份是相同的出生日期和月份,date,java-8,controller,dob,Date,Java 8,Controller,Dob,如果我有一个人的年龄,并且当前日期和月份与生日相同,那么如何使用Java8计算生日 例如: 年龄=30岁 当前日期=2019年7月1日 预期产量=1989年7月1日 我是Java初学者,所以被问到。但我找到了解决办法。谢谢你们的建议 public class test { public static void main(String[] args) { // TODO Auto-generated method stub int

如果我有一个人的年龄,并且当前日期和月份与生日相同,那么如何使用Java8计算生日

例如:

  • 年龄=30岁
  • 当前日期=2019年7月1日
  • 预期产量=1989年7月1日

我是Java初学者,所以被问到。但我找到了解决办法。谢谢你们的建议

public class test {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int age = 30;
            Date today = new Date();
            Calendar cal = Calendar.getInstance();
            cal.setTime(today);

            int dayOfYear = cal.get(Calendar.YEAR);
            int birthYear = dayOfYear - age;
            System.out.println(birthYear);
            // using local time
            LocalDate todayDate = LocalDate.now();
            int y = todayDate.getYear();
            int birthYearFromTime = y-age;
            System.out.println(birthYearFromTime);

        }

}
tl;博士 换句话说,你想从一个日期中减去若干年

LocalDate
.of( 2019 , Month.JULY , 1 ) 
.minusYears( 30 )
看这个

1989-07-01

LocalDate
该类表示一个只包含日期的值,不包含一天中的时间,也不包含或

时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”

如果未指定时区,JVM将隐式应用其当前默认时区。该默认值可能在运行时(!)期间出现,因此您的结果可能会有所不同。最好将所需/预期时区明确指定为参数。如果关键,请与用户确认区域

大陆/地区
的格式指定,例如
美国/蒙特利尔
非洲/卡萨布兰卡
,或
太平洋/奥克兰
。切勿使用2-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

如果要使用JVM的当前默认时区,请请求它并将其作为参数传递。如果省略,代码将变得模棱两可,我们无法确定您是否打算使用默认值,或者您是否像许多程序员一样不知道这个问题

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.
或者指定一个日期。你可以用一个数字来设置月份,1-12月的数字为1-12

LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;  // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
或者,最好使用预定义的枚举对象,一年中每个月一个。提示:在整个代码库中使用这些
Month
对象,而不仅仅是一个整数,这样可以使代码更加自我记录,确保有效值,并提供更高的可用性。同上

MonthDay
我有一种预感,你真正需要的是代表一个年度生日的概念,只有月份和月份的某一天,但没有一年

MonthDay
对象,您可以确定任何年份的日期,从而生成
LocalDate
对象。使用类获取当前年份

MonthDay birthMonthDay = MonthDay.of( Month.JANUARY , 23 ) ;
LocalDate birthDateSomeYear = birthMonthDay.atYear( 2010 ) ;
LocalDate birthDateThisYear = birthMonthDay.atYear( Year.now( z ).getValue() ) ;
在非闰年中,2月29日的一个月将调整为2月28日

日期数学 您可以从
LocalDate
中减去年数,生成一个新的
LocalDate
对象

int ageInYears = 37 ;
LocalDate then = someLocalDate.minusYears( ageInYears ) ;
如果你的意思是你有一个年、月、日的更精细的年龄分辨率,那么使用class

算算

LocalDate ld = someLocalDate.minus( p ) ;

到目前为止你都尝试了什么?欢迎来到stackoverflow。这不是一个编码服务网站。向我们展示您在a中迄今为止所做的工作,您将获得帮助
LocalDate.now(yourZoneId).minusYears(30)
。正如其他人已经暗示的那样:表现出你的努力会让这里的很多人更愿意努力帮助你。你试过Java8,很好。在页面上向下滚动到Java8日期和时间API。用我的搜索引擎找到它并不难。我忍不住想,多锻炼身体可能会让你受益。谢谢你分享你自己的两个解决方案。后者才是最合适的。类
Date
Calendar
的设计很差,而且很早就过时了,所以不要使用它们。
int ageInYears = 37 ;
LocalDate then = someLocalDate.minusYears( ageInYears ) ;
Period p = Period.of( 37 , 4 , 2 ) ; // years-months-days.
LocalDate ld = someLocalDate.minus( p ) ;