Java 如何重置日期或日期
代码实际上是有效的,但问题是当我再次选择日期时,最早的剩余月份将+最晚的剩余月份。有人能告诉我问题出在哪里吗??tl;博士 细节 您的问题不清楚,但似乎您正试图计算所选日期和当前日期(今天)之间的经过时间 避免遗留日期时间类 不要使用麻烦的遗留日期时间类,例如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
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 ;