Java如何获取两个日期时间之间的百分比
我想得到两个日期时间之间的百分比,这样我就可以使用进度条了 我有下面的代码,我传入两个datetimes并进行求和,但我得到了一个错误Java如何获取两个日期时间之间的百分比,java,android,time,elapsedtime,localdatetime,Java,Android,Time,Elapsedtime,Localdatetime,我想得到两个日期时间之间的百分比,这样我就可以使用进度条了 我有下面的代码,我传入两个datetimes并进行求和,但我得到了一个错误 private void getpercentage(String dateTimeStart, String dateTimeExpiration) { LocalDateTime start = LocalDateTime.parse(dateTimeStart.replace( " " , "T" ) ); LocalDateTime e
private void getpercentage(String dateTimeStart, String dateTimeExpiration) {
LocalDateTime start = LocalDateTime.parse(dateTimeStart.replace( " " , "T" ) );
LocalDateTime end = LocalDateTime.parse(dateTimeExpiration.replace( " " , "T" ) );
String start_date = start.toString().replace( "T", " " );
String end_date = end.toString().replace( "T", " " );
String p = Math.round( (end_date - start_date) * 100) + '%';
Log.d("type", "Date parsed : " + p);
}
如果不考虑时区,你就无法正确地做到这一点
private void getpercentage(String dateTimeStart, String dateTimeExpiration) {
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime start = LocalDateTime.parse(dateTimeStart.replace( " " , "T" ) )
.atZone(zone);
ZonedDateTime end = LocalDateTime.parse(dateTimeExpiration.replace( " " , "T" ) )
.atZone(zone);
long total = ChronoUnit.MICROS.between(start, end);
long passed = ChronoUnit.MICROS.between(start, ZonedDateTime.now(zone));
long percentage = passed * 100 / total;
System.out.println(String.valueOf(percentage) + " %");
}
要查看一天已经过去了多少时间:
getpercentage("2020-05-30 00:00:00", "2020-05-31 00:00:00");
现在在我的时区欧洲/哥本哈根跑步时:
91%
为了说明我关于时区的观点:在印度/马尔代夫时区运行时:
103%
所以在那个时区,5月30日已经过去了,5月31日已经过去了3%
使用long
类型和ChronoUnit.MICROS
(微秒)将在长达290000年的时间跨度内工作。对于较长的跨度,请选择一个Coarser装置。为了获得更高的精度和更短的范围,请使用更精细的单位,即纳秒
Java9及更高版本
Java9中引入了重载的
Duration.dividedBy(Duration)
方法。这允许我们使用Duration
类进行计算,因此我们不需要确定特定的时间单位。如果不考虑时区,您就无法正确地进行计算
private void getpercentage(String dateTimeStart, String dateTimeExpiration) {
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime start = LocalDateTime.parse(dateTimeStart.replace( " " , "T" ) )
.atZone(zone);
ZonedDateTime end = LocalDateTime.parse(dateTimeExpiration.replace( " " , "T" ) )
.atZone(zone);
long total = ChronoUnit.MICROS.between(start, end);
long passed = ChronoUnit.MICROS.between(start, ZonedDateTime.now(zone));
long percentage = passed * 100 / total;
System.out.println(String.valueOf(percentage) + " %");
}
要查看一天已经过去了多少时间:
getpercentage("2020-05-30 00:00:00", "2020-05-31 00:00:00");
现在在我的时区欧洲/哥本哈根跑步时:
91%
为了说明我关于时区的观点:在印度/马尔代夫时区运行时:
103%
所以在那个时区,5月30日已经过去了,5月31日已经过去了3%
使用long
类型和ChronoUnit.MICROS
(微秒)将在长达290000年的时间跨度内工作。对于较长的跨度,请选择一个Coarser装置。为了获得更高的精度和更短的范围,请使用更精细的单位,即纳秒
Java9及更高版本
Java9中引入了重载的
Duration.dividedBy(Duration)
方法。这允许我们使用持续时间
类进行计算,因此我们不需要确定特定的时间单位。百分比是多少?你能用两个日期时间来解释这意味着什么吗?也许将LocalDateTime
对象转换为epoch,然后使用它们进行计算会更简单。检查方法toepochssecond(ZoneOffset zos)
。顺便说一句,为了从中计算出一个百分比,我想你应该除以什么?把它们转换成整数(你喜欢的任何方式)<代码>进度=(当前开始)/(结束开始)*100百分比?你能用两个日期时间来解释这意味着什么吗?也许将LocalDateTime
对象转换为epoch,然后使用它们进行计算会更简单。检查方法toepochssecond(ZoneOffset zos)
。顺便说一句,为了从中计算出一个百分比,我想你应该除以什么?把它们转换成整数(你喜欢的任何方式)<代码>进度=(当前开始)/(结束开始)*100漂亮!特别是《Java 9及更高版本》这一节,是我今天学到的东西。太棒了!特别是,java9及更高版本
这一节是我今天学到的。