当前位置: 首页 > 知识库问答 >
问题:

如何使用java在日期时间中执行时间加法(“0:10”)(“0:15”)?预期结果为 00:25:00

西门马鲁
2023-03-14
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;

public class TimeAddition {
    public static void main(String args[]) throws ParseException {
        String i = "0:10";
        String a = "0:15";

// Converting String to Date format

        DateFormat sdf = new SimpleDateFormat("hh:mm");
        Date iTime = sdf.parse(i);
        Date aTime = sdf.parse(a);

//仅通过获取时间添加两个日期时间

        long totalTime = iTime.getTime() + aTime.getTime();

        System.out.println("Total time in millisecond = " + totalTime);

        long millis = totalTime;

//将以毫秒为单位的结果转换为“hh: mm: ss”

        String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
            TimeUnit.MILLISECONDS.toMinutes(millis)
                    - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
            TimeUnit.MILLISECONDS.toSeconds(millis)
                    - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

    System.out.println("Time format " + hms);
}

}

//输出预期00:25:00

共有3个答案

淳于博
2023-03-14

当您对日期对象调用getTime(),它返回自1970年1月1日00:00:00 GMT以来的毫秒数。

因此,当您在下面的语句中调用getTime()两次时

long totalTime = iTime.getTime() + aTime.getTime();

自 1970 年 1 月 1 日 00:00:00 GMT 以来,您已添加了两次毫秒。因此,您必须减少一次才能获得所需的值。请参阅以下代码片段:

... //your code
String b = "0:00";

// Converting String to Date format

DateFormat sdf = new SimpleDateFormat("hh:mm");
... //your code
Date bTime = sdf.parse(b);
// Adding two date time only by getting time

long totalTime = iTime.getTime() + aTime.getTime() -bTime.getTime(); //subtracting extra value
System.out.println("Total time in millisecond = " + totalTime);

long millis = totalTime;
// Converting result in milliseconds to "hh:mm:ss"

sdf = new SimpleDateFormat("HH:mm:ss");
String hms = sdf.format(new Date(totalTime));

System.out.println("Time format " + hms);

我采取了另一种方法将totalTime转换为所需的格式。

戎桐
2023-03-14
long totalTime = iTime.getTime() + aTime.getTime() - (2 * sdf.parse("0:0").getTime());

应该可以解决这个问题。

Date.getTime 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来由此 Date 对象表示的毫秒数。

公孙宏畅
2023-03-14

看起来你想增加持续时间,Java 8中有一个类来表示:

Duration d1 = Duration.ofMinutes(10);
Duration d2 = Duration.ofMinutes(15);
Duration d = d1.plus(d2); //25 minutes

然后需要将其格式化以供输出。围绕这一点有几个问题,例如:

  • 为什么我不能在java中获得以分钟或小时为单位的持续时间。时间
  • 在Java 8/jsr310中格式化持续时间

请注意,如果持续时间少于一天,您可以使用:

LocalTime.MIDNIGHT.plus(d).format(DateTimeFormatter.ofPattern("HH:mm:ss"))
 类似资料:
  • 问题内容: 我有一个字符串‘2009-06-24 09:52:43.000’,我需要将其插入到表的DateTime列中。 但我不在乎时间,只想将其插入为2009-06-24 00:00:00.000 如何在T-SQL中做到这一点? 问题答案: 对于SQL Server 2005及以下版本: 对于SQL Server 2008及更高版本:

  • 问题内容: 我需要在数据库上更改一些值。 我忘记为表格设置可空值,并且默认情况下将其设置为0000-00-00 00:00:00。 现在,我需要将该值转换为。 字段类型为“日期时间”。 我该怎么做? 我尝试使用典型的方法,但是它不起作用。 问题答案: 您首先需要将该列设置为可空: 然后更新值:

  • 问题内容: 论坛成员 我在Java中遇到日期时间问题。实际上,我正在接收 格式为2012-02-27T01:10:10 的开始日期,并且我想将接收到的日期插入具有datetime数据类型的数据库中。 实际上,我尝试通过以下代码将收到的开始日期转换为日期时间 但是使用上面的代码,只有 日期被添加到我的数据库中,例如2012-02-27 00:00:00 我也想将时间添加到数据库中,但是当我将Simp

  • 我想得到25个小时,以毫秒为单位,即90000000(25个小时,以毫秒为单位),有什么方法可以使用Java8日期和时间api动态计算吗?我正在尝试如下: 但似乎编译错误:

  • 问题内容: 我最近接手了一个十年前创建的旧项目。它使用MySQL 5.1。 除其他外,我需要将默认字符集从latin1更改为utf8。 例如,我有这样的表: 我设置了自己的Mac来进行此工作。不用考虑太多,我运行了“ brew install mysql”,它安装了MySQL 5.7。所以我有一些版本冲突。 我下载了此数据库的副本并将其导入。 如果我尝试运行这样的查询: 我收到此错误: 我以为可以

  • 本文向大家介绍JAVA中的日期时间类用法总结,包括了JAVA中的日期时间类用法总结的使用技巧和注意事项,需要的朋友参考一下 前言 好记性不如烂笔头,日期时间类那么花哨不如记下来多看两眼。 提示:以下是本篇文章正文内容,下面案例可供参考 一.日期时间类的包 代码如下(示例): 二.Data类 java.util.Date; Date类是我们之前常用的一个日期和时间的对象,此类在 java.util