java 减法 时间_Java中的间隔时间减法

您不需要第三方库

这是一个简单的数学,并不直接与Date DateTime或Timestamp实例有关,但似乎与interval相关,并且JDK中有内置功能> = 1.5,java.util.concurrent.TimeUnit只处理此类型没有引入任何依赖关系的数学。

下面是解析输入并将其转换为毫秒的代码,然后您可以将其转换回您想要的任何String格式,我方便地选择您请求的格式。

java.util.concurrent.TimeUnit是一个隐藏的小宝石,大多数人都不知道这种偷偷摸摸的1.5。将这个类隐藏在java.util.concurrent包中并且似乎没有人知道它是一种犯罪行为。

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位数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值