Java 如何重置日期或日期

Java 如何重置日期或日期,java,date,android-studio,datepicker,Java,Date,Android Studio,Datepicker,代码实际上是有效的,但问题是当我再次选择日期时,最早的剩余月份将+最晚的剩余月份。有人能告诉我问题出在哪里吗??tl;博士 细节 您的问题不清楚,但似乎您正试图计算所选日期和当前日期(今天)之间的经过时间 避免遗留日期时间类 不要使用麻烦的遗留日期时间类,例如java.util.date和java.util.Calendar。它们现在是遗留的,被java.time类取代。大部分java.time功能都在中向后移植到Java6和Java7,并在中进一步适应Android 另外,Date和Calen

代码实际上是有效的,但问题是当我再次选择日期时,最早的剩余月份将+最晚的剩余月份。有人能告诉我问题出在哪里吗??

tl;博士 细节 您的问题不清楚,但似乎您正试图计算所选日期和当前日期(今天)之间的经过时间

避免遗留日期时间类 不要使用麻烦的遗留日期时间类,例如
java.util.date
java.util.Calendar
。它们现在是遗留的,被java.time类取代。大部分java.time功能都在中向后移植到Java6和Java7,并在中进一步适应Android

另外,
Date
Calendar
表示一天中某个时间的日期。你只需要一个日期就可以了

LocalDate
该类表示一个仅限日期的值,不包含一天中的时间和时区

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

您可以使用当前默认时区,或者,如果重要,请询问用户其预期/预期时区

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

不要费心构造字符串来构建日期。只需向对象询问其数据

ZoneId z = ZoneId.systemDefault();  // or ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
从这些数据中创建一个
LocalDate

int year = myDatePicker.getYear() ;
int month = myDatePicker.getMonth() ;
int dayOfMonth = myDatePicker.getDayOfMonth() ;
Period
要表示所选日期和今天之间的时间跨度,请使用
期间

LocalDate ld = LocalDate.of( year , month , dayOfMonth ) ;
生成
字符串作为输出
要在中将该值视为字符串,请调用
toString
。您将导致这样一个
PT3D
三天。如果您的用户可以被训练来理解这种紧凑格式,请考虑使用它。p> 要构建自己的字符串作为输出,请查询
期间
对象中的天数、月数和年数

Period period = Period.between( today , ld );  

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)
LocalDate ld = LocalDate.of( year , month , dayOfMonth ) ;
Period period = Period.between( today , ld );  
int days = period.getDays();
int days = period.getMonths();
int years = period.getYears();

String output = "years: " + years + "months: " + months + "days: " + days ;