Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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_Date_Double - Fatal编程技术网

在Java中向日期中添加表示分钟的双变量

在Java中向日期中添加表示分钟的双变量,java,date,double,Java,Date,Double,我有一个起点-终点矩阵,表示2点之间经过的时间(以分钟为单位)。我想知道将经过的时间添加到日期的最佳方式是什么 Date clock; SimpleDateFormat reqDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); clock = reqDF.parse(line[25]); Double distance = distDB.find_distance(O, D, mode

我有一个起点-终点矩阵,表示2点之间经过的时间(以分钟为单位)。我想知道将经过的时间添加到日期的最佳方式是什么

       Date clock;
       SimpleDateFormat reqDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
       clock = reqDF.parse(line[25]);
       Double distance = distDB.find_distance(O, D, mode, facility_id);
       Date current_time = clock + distance;
如果我使用日历类型而不是日期,会更容易吗


谢谢

如果我了解您的情况,您希望获得当前日期,然后使用矩阵[i,j]值(即时间-分钟)更新时间,以给出指示-如果您从起点(i)开始,直到到达目的地(j)的时间。
我宁愿使用java的Calendar类。它给你更多的灵活性。使用“Calendar”类,您可以使用getTime(),它返回“Date”类型实例,然后使用该类添加/删除您的时间偏移量(该类提供了用于此类操作的方法),并将“Date”转换回日历。

如果我了解您的情况,您希望获得当前日期,然后使用矩阵[i,j]值(即时间-以分钟为单位)您希望更新时间以给出指示-如果您从起点(i)开始,直到到达目的地(j)的时间。 我更愿意使用java的Calendar类。它为您提供了更大的灵活性。使用“Calendar”类,您可以使用getTime(),它返回“Date”类型的实例,然后使用该类添加/删除您的时间偏移量(此类操作有该类提供的方法),并将“Date”转换回日历。

您可以使用以下方法尝试此操作:

在这里,日期被转换为毫秒时间戳。 由于距离以分钟为单位,因此需要将其乘以60*1000(=60000)将其转换为毫秒,然后才能将其添加到开始时间(“时钟”)。最后,将创建一个新日期,表示与开始时间的距离

请在此处查找日期类的详细信息:

您可以使用以下方法尝试此操作:

在这里,日期被转换为毫秒时间戳。 由于距离以分钟为单位,因此需要将其乘以60*1000(=60000)将其转换为毫秒,然后才能将其添加到开始时间(“时钟”)。最后,将创建一个新日期,表示与开始时间的距离

请在此处查找日期类的详细信息:

tl;dr 避免旧的日期时间类。 实际上,您既不应该使用
java.util.Date
也不应该使用
java.util.Calendar
。这些旧的遗留类是出了名的麻烦、混乱和缺陷。现在已被java.time类取代

对于旧类,正确答案是正确的。对于java.time类,请继续阅读

避免对经过的时间使用小数 使用
double
double
来表示经过的时间不是一个好主意。首先,这种类型使用的技术在精度和执行速度之间进行权衡。因此,小数点右侧通常会有额外的数字

其次,考虑到我们有60秒到一分钟,60分钟到一小时,等等,这是一种处理时间的笨拙方式

  • 在Java中,使用或类。请参阅
  • 在文本中,使用标准格式
    PnYnMnDTnHnMnS
    ,其中
    P
    标记开始,
    T
    将年、月、日和时、分、秒分开。因此,两分半钟应为
    PT2M30S
纳秒 如果我们必须使用
Double
作为经过时间的分钟数,那么让我们将小数转换为整数(整数)

请注意,旧的旧式日期时间类的分辨率限制为毫秒,而java.time类的分辨率可以达到纳秒。因此,我们希望将
Double
转换为整数纳秒

让我们使用enum,而不是为这个计算硬编码一分钟内纳秒数的神奇数字。该类可以为我们计算一分钟内纳秒数(60*1_000_000_000L)

最后,函数返回最接近参数的long,并将其舍入为正无穷大

long nanoseconds = Math.round( 
    yourNumberOfMinutesAsDouble * 
    TimeUnit.MINUTES.toNanos( 1 ) 
);
Instant
如果在中使用日期-时间值,请使用该类。每个
瞬间
表示时间线上的某一时刻,分辨率为

持续时间
我强烈建议您传递
Duration
对象,而不是传递
Double
作为经过的时间

Duration duration = Duration.ofNanos( Math.round( yourNumberOfMinutesAsDouble * TimeUnit.MINUTES.toNanos( 1 ) ) );
你可以用
持续时间
做数学题,比如
加号
减号

Instant instant = Instant.parse( "2016-12-23T01:23:45Z" )
Instant future = instant.plus( duration );
只需调用
toString
,您就可以以标准ISO 8601格式生成
持续时间的字符串表示形式,如
PT8H6M12.345S
。并且
持续时间
也可以解析此类字符串

String output = duration.toString(); // PT8H6M12.345S
…或者去另一个方向

Duration duration = Duration.parse( "PT8H6M12.345S" );
太长,读不下去了 避免旧的日期时间类。 实际上,您既不应该使用
java.util.Date
也不应该使用
java.util.Calendar
。这些旧的遗留类是出了名的麻烦、混乱和缺陷。现在已被java.time类取代

对于旧类,正确答案是正确的。对于java.time类,请继续阅读

避免对经过的时间使用小数 使用
double
double
来表示经过的时间不是一个好主意。首先,这种类型使用的技术在精度和执行速度之间进行权衡。因此,小数点右侧通常会有额外的数字

其次,考虑到我们有60秒到一分钟,60分钟到一小时,等等,这是一种处理时间的笨拙方式

  • 在Java中,使用或类。请参阅
  • 在文本中,使用标准格式
    PnYnMnDTnHnMnS
    ,其中
    P
    标记开始,
    T
    将年、月、日和时、分、秒分开。因此,两分半钟应为
    PT2M30S
纳秒 如果
Instant instant = Instant.parse( "2016-12-23T01:23:45Z" )
Instant future = instant.plus( duration );
String output = duration.toString(); // PT8H6M12.345S
Duration duration = Duration.parse( "PT8H6M12.345S" );