为什么这个时间单位转换返回零?

Ant*_*stu 1 java math floating-point integer long-integer

我遇到了以下代码的问题.它将毫秒转换为月,日,小时和分钟.

long diffms = date2l - date1l; //The result here is in milliseconds; The value of date2l - date1l are different
long diff_minute = diffms / 60000;

long diff_hour = diff_minute / 60; float diff_minute_now = (diff_minute % 1) * 60; int dmn = (int) diff_minute_now;
long diff_day = diff_hour / 24; float diff_hour_now = (diff_hour % 1) * 24; int dhn = (int) diff_hour_now;
long diff_month = diff_day / 30; float diff_day_now = (diff_day % 1) * 30;  int ddn = (int) diff_day_now;   

diffe = new LabelField
("Remaining Time : " + Long.toString(diff_month) + " month(s) " 
                    + Integer.toString(ddn) + " day(s) " 
                    + Integer.toString(dhn) + " hour(s) "
                    + Integer.toString(dmn) + " minute(s)");
add(diffe);
Run Code Online (Sandbox Code Playgroud)

为什么结果值全为零?

编辑:@BicycleDude我将你的代码修改为:

long diffms = date2l - date1l;
long ts = diffms / 1000;

long mo = ts / 60 / 60 / 24 / 30;
long d = (ts - mo * 30 * 24 * 60 * 60) / (60 * 60 * 24);
long h = (ts - d * 24 * 60 * 60) / (60 * 60);
long m = (ts - h * 60 * 60) / 60;
Run Code Online (Sandbox Code Playgroud)

但是时间不起作用

Ste*_*uan 5

'any%1'将返回0.它可能不是你想要的.

  1. 您最初划分的变量是long类型.所以他们的结果也会很长.(例如12345/100 = 123而不是123.45).
  2. 模运算符用于整数除法的余数.(例如12345%100 = 45).
  3. 您提供的算法不会以您期望的方式提取日,月,小时,分钟,秒.它需要返工才能正确.

假设一个月有31天,我已经重新设计了这些公式:

long diffms = date2l - date1l;
long mo = (diffms / 1000 / 60 / 60 / 24 / 31);
long d = (diffms / 1000 / 60 / 60 / 24) % 31;
long h = (diffms / 1000 / 60 / 60) % 24;
long m = (diffms / 1000 / 60) % 60;
long s = (diffms / 1000) % 60;
Run Code Online (Sandbox Code Playgroud)