如果我有一个人的年龄,并且当前日期和月份与出生日期相同,那么如何使用Java 8计算出生年份?
例如:
答案 0 :(得分:2)
换句话说,您要从日期中减去若干年。
LocalDate
.of( 2019 , Month.JULY , 1 )
.minusYears( 30 )
请参阅此code run live at IdeOne.com。
1989-07-01
LocalDate
LocalDate
类表示没有日期,没有time zone或offset-from-UTC的仅日期值。
时区对于确定日期至关重要。在任何给定时刻,日期都会在全球范围内变化。例如,Paris France午夜之后的几分钟是新的一天,而Montréal Québec仍然是“昨天”。
如果未指定时区,则JVM隐式应用其当前的默认时区。该默认值可能在运行时(!)期间change at any moment,因此您的结果可能会有所不同。最好将您的期望/期望时区明确指定为参数。如果紧急,请与您的用户确认区域。
以Continent/Region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用2-4个字母的缩写,例如EST
或IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
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-safety。 Year
和YearMonth
的同上。
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);
}
}