Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何获取两个日期时间之间的百分比_Java_Android_Time_Elapsedtime_Localdatetime - Fatal编程技术网

Java如何获取两个日期时间之间的百分比

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

我想得到两个日期时间之间的百分比,这样我就可以使用进度条了

我有下面的代码,我传入两个datetimes并进行求和,但我得到了一个错误

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及更高版本
这一节是我今天学到的。