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

时间:2019-07-01 05:36:20

标签: date java-8 controller dob

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

例如:

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

2 个答案:

答案 0 :(得分:2)

tl; dr

换句话说,您要从日期中减去若干年。

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

请参阅此code run live at IdeOne.com

  

1989-07-01

LocalDate

LocalDate类表示没有日期,没有time zoneoffset-from-UTC的仅日期值。

时区对于确定日期至关重要。在任何给定时刻,日期都会在全球范围内变化。例如,Paris France午夜之后的几分钟是新的一天,而Montréal Québec仍然是“昨天”。

如果未指定时区,则JVM隐式应用其当前的默认时区。该默认值可能在运行时(!)期间change at any moment,因此您的结果可能会有所不同。最好将您的期望/期望时区明确指定为参数。如果紧急,请与您的用户确认区域。

Continent/Region的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用2-4个字母的缩写,例如ESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;  
LocalDate today = LocalDate.now( z ) ;

如果要使用JVM的当前默认时区,请提出要求并作为参数传递。如果省略,代码将变得难以理解,因为我们不确定您是否打算使用默认值,还是像许多程序员一样不知道该问题。

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.

或指定日期。您可以用数字设置月份,一月至十二月的理智编号为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枚举对象,每年的每个月使用一个。提示:在整个代码库中使用这些Month对象,而不是仅使用整数,可以使您的代码更具自记录性,确保有效值并提供type-safetyYearYearMonth的同上。

LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;

MonthDay

我有一种直觉,您真正需要的是MonthDay,以表示年度生日的想法,只是一个月和一个月中的一天,但没有一年。

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

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 ) ;

如果您的意思是您的年龄可以更好地解析为年-月-日,请使用Period类。

Period p = Period.of( 37 , 4 , 2 ) ; // years-months-days.

算一算。

LocalDate ld = someLocalDate.minus( p ) ;

答案 1 :(得分:0)

我是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);

        }

}