从calendar类java获取生日
对不起,格式不正确,但我需要帮助的所有内容的格式都正确。我需要帮助将出生日期设置为我想要的任何日期,然后测试是否是我的生日,或者月份是否与我的出生月份相同。谢谢 您有两个问题:从calendar类java获取生日,java,class,oop,Java,Class,Oop,对不起,格式不正确,但我需要帮助的所有内容的格式都正确。我需要帮助将出生日期设置为我想要的任何日期,然后测试是否是我的生日,或者月份是否与我的出生月份相同。谢谢 您有两个问题: Calendar.MONTH一月以0开头,而Calendar.DAY/u月以1开头。所以你需要这个.dob.set(生日,生日-1,生日) Calendar.DAY/u/u MONTH和Calendar.MONTH是字段索引,而不是今天的日期和月份。您需要创建日历的“今天”实例,并根据该实例测试Calendar.getI
Calendar.MONTH
一月以0开头,而Calendar.DAY/u月以1开头。所以你需要这个.dob.set(生日,生日-1,生日)代码>
Calendar.DAY/u/u MONTH
和Calendar.MONTH
是字段索引,而不是今天的日期和月份。您需要创建日历的“今天”实例,并根据该实例测试Calendar.getInstance().get(Calendar.DAY\u of\u MONTH)
import java.util.Calendar;
public class Person {
private Calendar dob = Calendar.getInstance();
private String name;
private int phoneNum;
public Person (String name, int birthYear, int birthMonth, int birthDate) {
this.name = name;
this.dob.set(birthYear, birthMonth, birthDate);
}
public Calendar getDob() {
return dob;
}
public void setDob(Calendar dob) {
this.dob = dob;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(int phoneNum) {
this.phoneNum = phoneNum;
}
// I want this to return true if today is my birthday
public boolean isCurrentDayInMonthSameAsBirthDayInMonth() {
if (Calendar.DAY_OF_MONTH == this.dob.get(this.dob.DAY_OF_MONTH)) {
return true;
}
else {
return false;
}
}
// I want this to return true if the month is the same as my birth month
public boolean isCurrentMonthSameAsBirthMonth() {
if (Calendar.MONTH == this.dob.get(this.dob.MONTH)) {
return true;
}
else {
return false;
}
}
}
tl;博士
今天是他/她的生日吗
// I want this to return true if today is my birthday
public boolean isCurrentDayInMonthSameAsBirthDayInMonth() {
return isSameAsToday(Calendar.DAY_OF_MONTH);
}
// I want this to return true if the month is the same as my birth month
public boolean isCurrentMonthSameAsBirthMonth() {
return isSameAsToday(Calendar.MONTH);
}
private boolean isSameAsToday(int field){
return Calendar.getInstance().get(field) == this.dob.get(field);
}
Boolean isBirthdayToday =
MonthDay.from( LocalDate.of( 1953 , 1 , 23 ) )
.equals(
MonthDay.from( LocalDate.now( ZoneId.of( "America/Montreal" ) ) )
) ;
这个月是他/她的生日吗
// I want this to return true if today is my birthday
public boolean isCurrentDayInMonthSameAsBirthDayInMonth() {
return isSameAsToday(Calendar.DAY_OF_MONTH);
}
// I want this to return true if the month is the same as my birth month
public boolean isCurrentMonthSameAsBirthMonth() {
return isSameAsToday(Calendar.MONTH);
}
private boolean isSameAsToday(int field){
return Calendar.getInstance().get(field) == this.dob.get(field);
}
Boolean isBirthdayToday =
MonthDay.from( LocalDate.of( 1953 , 1 , 23 ) )
.equals(
MonthDay.from( LocalDate.now( ZoneId.of( "America/Montreal" ) ) )
) ;
使用java.time
您使用的是麻烦的旧日期时间类,现在是遗留的,被java.time类取代
LocalDate
该类表示一个仅限日期的值,不包含一天中的时间和时区
您的Person
class'出生日期成员变量的类型应为LocalDate
Boolean isBirthdayThisMonth =
Month.from( LocalDate.of( 1953 , 1 , 23 ) )
.equals(
Month.from( LocalDate.now( ZoneId.of( "America/Montreal" ) ) )
) ;
我建议在代码周围传递LocalDate
对象,而不仅仅是年-月-日的整数。这样做会使您的代码更加自文档化,提供类型安全性,并确保有效值
时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”
以大陆/地区
的格式指定,例如,或太平洋/奥克兰
。切勿使用3-4个字母的缩写,如EST
或IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)
MonthDay
为了确定今天是否是此人的生日,我们需要比较月份和日期,而忽略年份。为此,请使用该类
月份
要比较出生月份而不是出生年月日,请使用枚举。与上面看到的代码相同
MonthDay birthMonthDay = MonthDay.from( birthDate );
MonthDay todayMonthDay= MonthDay.from( today );
Boolean isBirthdayToday = birthMonthDay.equals( todayMonthDay );
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 从哪里获得java.time类
- 后来
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门为Android采用了ThreeTen Backport(如上所述)
- 看
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和。我强烈建议不要使用遗留的
java.util.Calendar
和java.util.Date
类。您应该改为使用java.time
包中的类。注意,您可以按照以下方式重写布尔方法return Calendar.MONTH==this.dob.get(this.dob.MONTH;
(如果其他方法是多余的,则使用这些方法)。如果可以的话,我会使用java.time,但是我必须使用java.util.Calendar来完成这个特殊的作业。也许你应该让你的老师看看这些注释!也许isSameAsToday
会是一个更好的名称。isToday
令人困惑。
Month birthMonth = Month.from( birthDate );
Month todayMonth= Month.from( today );
Boolean isBirthdayThisMonth = birthMonth.equals( todayMonth );