Java中的间隔时间减法

如何解决Java中的间隔时间减法

| 我试图找出Java中的时间差异(HH:mm:ss.SSS),每次时间可能超过24小时。
SimpleDateFormat
不支持超过24小时的时间。 例如, 时间A = 36:00:00.00 时间B = 23:00:00.00 我想得到13:00:00.00的答案。 (13小时)。 是否有人知道是否存在任何可以执行减法的Java库。还想知道Java库是否可以添加时间。     

解决方法

        您不需要第三方库 这是简单的数学运算,似乎与
Date
DateTime
Timestamp
实例没有直接关系,但似乎与
interval
相关,并且JDK> = 1.5中内置了功能,其中
java.util.concurrent.TimeUnit
可以处理此问题。数学类型,而不引入任何依赖关系。 这是解析您的输入并将其转换为毫秒的代码,然后您可以将其转换回所需的任何“ 6”格式,我方便地选择了所需的格式。 java.util.concurrent.TimeUnit是一个小小的隐藏的宝石,大多数人都不知道这种隐藏在1.5中的宝石。将此类隐藏在“ 7”包中是一种犯罪,似乎没有人知道。
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main
{
    private static long parseInterval(final String s)
    {
        final Pattern p = Pattern.compile(\"^(\\\\d{2}):(\\\\d{2}):(\\\\d{2})\\\\.(\\\\d{3})$\");
        final Matcher m = p.matcher(s);
        if (m.matches())
        {
            final long hr = Long.parseLong(m.group(1)) * TimeUnit.HOURS.toMillis(1);
            final long min = Long.parseLong(m.group(2)) * TimeUnit.MINUTES.toMillis(1);
            final long sec = Long.parseLong(m.group(3)) * TimeUnit.SECONDS.toMillis(1);
            final long ms = Long.parseLong(m.group(4));
            return hr + min + sec + ms;
        }
        else
        {
            throw new IllegalArgumentException(s + \" is not a supported interval format!\");
        }
    }

    private static String formatInterval(final long l)
    {
        final long hr = TimeUnit.MILLISECONDS.toHours(l);
        final long min = TimeUnit.MILLISECONDS.toMinutes(l - TimeUnit.HOURS.toMillis(hr));
        final long sec = TimeUnit.MILLISECONDS.toSeconds(l - TimeUnit.HOURS.toMillis(hr) - TimeUnit.MINUTES.toMillis(min));
        final long ms = TimeUnit.MILLISECONDS.toMillis(l - TimeUnit.HOURS.toMillis(hr) - TimeUnit.MINUTES.toMillis(min) - TimeUnit.SECONDS.toMillis(sec));
        return String.format(\"%02d:%02d:%02d.%03d\",hr,min,sec,ms);
    }

    public static void main(final String[] args)
    {
        final String s1 = \"36:00:00.000\";
        final String s2 = \"23:00:00.000\";

        final long i1 = parseInterval(s1);
        final long i2 = parseInterval(s2);

        System.out.println(formatInterval(i1 - i2));
    }
}
输出是
13:00:00.000
我假设您的意思是最后一个数字是
milliseconds
,其分辨率应为3位数。     ,        这是使用JodaTime的完整解决方案。我敢说使用easy11ѭ或
java.util.concurrent
api并没有相对简单而优雅的方法:
public static int getHoursBetween(final String date1,final String date2){
    final DateTimeFormatter fmt =
        DateTimeFormat
            .forPattern(\"HH:mm:ss.SS\")
            .withChronology(
                LenientChronology.getInstance(
                    GregorianChronology.getInstance()));
    return Hours.hoursBetween(
        fmt.parseDateTime(date1),fmt.parseDateTime(date2)
    ).getHours();
}
LenientChronology
确保支持38:00:00.00之类的值)     ,        看一下Joda-Time,它是一个完整的库,用于处理Java中的时间和日期,包括间隔算法。     ,        尝试将时间转换为秒,然后减去然后转换回简单的时间格式。     ,        这是一个示例,说明如何使用Joda-Time来获取两个日期之间的时差(Jim Garrison先前提到过。它确实是可用的最佳时间库之一。
  public static void main(String[] args) {
    DateTime timeA = new DateTime(2011,6,13,12,0);
    DateTime timeB = new DateTime(2011,23,0);

    Period period = new Period(timeB,timeA);
    System.out.println(period.getHours());
  }
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?