DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener(){
@Override
public void onDateSet(DatePicker view,int year,int monthOfYear,int dayOfMonth){
//Use Datepicker to pick the date i want.
String date1 = dayOfMonth+"/"+(monthOfYear+1)+"/"+year;
//get the current date.
String date2 = new SimpleDateFormat("dd/MM/yyyy").format(new Date());
Date d1 = new Date(date1);
Date d2 = new Date(date2);
Calendar cal1 = Calendar.getInstance();cal1.setTime(d1);
Calendar cal2 = Calendar.getInstance();cal2.setTime(d2);
//Compare two date.
long calq = (d2.getTime() - d1.getTime()) / (24 * 60 * 60 * 1000);
long caq = calq / 30;
String c = Long.toString(calq);
String b = Long.toString(caq);
e1.setText(c);
test1.setText(b + " month");
}
};
代码实际上是可行的,但问题是当我再次选择日期时,最早的剩余月份将是+最新的剩余月份。任何人都可以告诉我问题是什么?
答案 0 :(得分:0)
Period.between(
LocalDate.now() ,
LocalDate.of(
myDatePicker.getYear() ,
myDatePicker.getMonth() ,
myDatePicker.getDayOfMonth()
)
)
您的问题不明确,但似乎您正在尝试计算所选日期与当前日期(今天)之间的经过时间。
请勿使用麻烦的旧版日期时间类,例如java.util.Date
和java.util.Calendar
。这些现在是遗留的,取而代之的是java.time类。许多java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。
此外,Date
和Calendar
代表一个包含时间的日期。您只需要一个日期用于您的目的。
LocalDate
LocalDate
类表示没有时间且没有时区的仅限日期的值。
时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。
您可以使用当前默认时区,或者,如果重要,请询问用户其预期/预期时区。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.systemDefault(); // or ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
不要费心构建字符串来构建日期。只需询问DatePicker
对象的数据即可。
int year = myDatePicker.getYear() ;
int month = myDatePicker.getMonth() ;
int dayOfMonth = myDatePicker.getDayOfMonth() ;
从那些人那里获得LocalDate
。
LocalDate ld = LocalDate.of( year , month , dayOfMonth ) ;
Period
要表示所选日期与今天之间的时间跨度,请使用Period
类。
Period period = Period.between( today , ld );
String
作为输出要在standard ISO 8601 format中将该值视为字符串,请致电toString
。这样的PT3D
会产生三天。如果您的用户可以接受培训以了解此紧凑格式,请考虑使用它。
要构建自己的字符串作为输出,请查询Period
对象中的天数,月数和年数。
int days = period.getDays();
int days = period.getMonths();
int years = period.getYears();
String output = "years: " + years + "months: " + months + "days: " + days ;
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?