java中计算一段时间内白天的时间和夜晚的时间
之前,采用拼接字符串的形式,不断地在Date类型和Long类型之间转换,实在是太过于麻烦,后来采取了这种思路:假设我们将22:00 ~ 10:00 视为夜间时间,则我们先计算出10:00 相对于当天的分钟数,22:00 相对于当天的分钟数,然后将我们取到的Date转换成Long型,加上8 * 60 * 60 * 1000,对 一天的分钟数取余,根据结果来判断是在白天还是夜晚,while循环中继续累加下一分钟,下面见具体算法
package com.company;
import com.sun.scenario.Settings;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startOrderTime = sdf.parse("2018-05-23 14:00:00");
Date endOrderTime = sdf.parse("2018-05-24 14:36:28");
String staN = "22:00:00";
String etaN = "10:00:00";
new Main().calcRoughly(startOrderTime, endOrderTime, staN, etaN);
}
private void calcRoughly(Date startOrderTime, Date endOrderTime, String startTimeAtNight, String endTimeAtNight) {
// 以分钟为单位进行统计
long dayTime = 0;
long nightTime = 0;
long startTime = startOrderTime.getTime();
long endTime = endOrderTime.getTime();
long startCurMinutes = calcCurMinutes(startTimeAtNight);
long endCurMinutes = calcCurMinutes(endTimeAtNight);
while (startTime <= endTime) {
long modTime = ((startTime + 8 * 60 * 60 * 1000) / (1000 * 60)) % (24 * 60);
if (modTime >= endCurMinutes && modTime < startCurMinutes) {
dayTime += 1;
}
else {
nightTime += 1;
}
startTime += (1000 * 60);
}
System.out.println(dayTime);
System.out.println(nightTime);
}
// 时间字符串 "22:00:00"
long calcCurMinutes(String time) {
String pattern = "\\d{2}:\\d{2}:\\d{2}";
if (Pattern.matches(pattern, time)) {
int hour = Integer.valueOf(time.substring(0, 2));
int minutes = Integer.valueOf(time.substring(3, 5));
return hour * 60 + minutes;
}
return 0;
}
}
java中计算一段时间内白天的时间和夜晚的时间的更多相关文章
- JAVA中计算两个日期时间的差值竟然也有这么多门道
上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...
- storm入门(二):关于storm中某一段时间内topN的计算入门
刚刚接触storm 对于滑动窗口的topN复杂模型有一些不理解,通过阅读其他的博客发现有两篇关于topN的非滑动窗口的介绍.然后转载过来. 下面是第一种: Storm的另一种常见模式是对流式数据进行所 ...
- Java中计算对象的大小
一.计算对象大小的方法 Java中如何计算对象的大小呢,找到了4种方法: 1.java.lang.instrument.Instrumentation的getObjectSize方法: 2.BTrac ...
- Java 中计算注意!!!
* 使用BigDecimal需要注意的事项: * 1.两个BigDecimal值不能使用" +, -, *, / " 进行加减乘除,要使用" add, substrac ...
- java中计算两个日期之间天数的程序设计。
//用java编写出一个以下方法计算两个日期之间天数的程序设计. import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...
- java中计算两个时间差
java计算时间差及比较时间大小 比如:现在是2004-03-26 13:31:40 过去是:2004-01-02 11:30:24 我现在要获得两个日期差,差的形式为:XX天XX小时XX分XX秒 方 ...
- 关于Java中计算日期差值不准确问题
1.字符串日期相减 如:2016-4-1,必须先将此字符串转成Date对象,并且, 格式必须为:yyyy—MM—dd HH:mm:ss. 如果不转就直接计算(2016-4-1)两个这样的日期,则误差 ...
- JAVA中计算两个时间相差多少 天,时,分,秒
1: import java.util.Date; 2: 3: public class ShowTimeInterval{ 4: public void ShowTimeInterval(Date ...
- java中计算时间差
Calendar cale = null; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" ...
随机推荐
- IDEA 设置导出
见附件 https://files.cnblogs.com/files/chuancheng/settings.7z
- java继承。顾不了
总结:为什么结果显示所有数据都重复输出了呢? package com.sa; //java里的几个难以理解的概念.字节码文件.class文件.源文件 //.class文件指的是.编译后产生的字节码文件 ...
- tree指令
tree 中文解释:tree功能说明:以树状图列出目录的内容.语 法:tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录.. ...
- kubernetes 学习 ingress
ingress是Kubernetes 暴露服务的一种方式. Ingress由两部分组成:Ingress Controller 和 Ingress 服务. Ingress Contronler ...
- ruby on rails 中render的
Ruby rails页面跳转代码如下: 1.render(:text => string) 2.render(:inline => string, [:type => "r ...
- 三种web性能压力测试工具
三种web性能压力测试工具http_load webbench ab小结 题记:压力和性能测试工具很多,下文讨论的是我觉得比较容易上手,用的比较多的三种 http_load 下载地址:http://w ...
- Java 中的关键字和保留字
关键字: Java 语言中已经事先定义好了的,有着特殊含义和用途 访问控制 类.方法和变量修饰符 程序控制 异常处理 包相关 基本类型 变量引用 public abstract break try i ...
- CSS3新特性详解
本文讲解CSS3相关实用知识点 CSS3相关实用知识点目录 边框设置 颜色设置 背景设置 渐变使用 超出文本设置 阴影设置 CSS3变换设置 过渡设置 动画设置 多列布局 BoxSizing设置 弹性 ...
- 无人零售的黑科技:RFID技术
无人零售的黑科技:RFID技术说起最近的热门话题,“无人零售商店”当属其一.自去年底,亚马逊推出第一家无人实体超市Amazon Go,到阿里.京东.大润发等各大企业纷纷加入,无人商店被推上了风口浪尖. ...
- 12-18Windows窗体应用小程序之记事本(1)
一.记事本制作(1) C#结合窗体制作小程序,相比较之前的控制台应用程序可能要改善了好多,最起码界面看起来可以高仿一下了,但是最重要的还是要看其里面的功能是否实现.所以,要以实现其实用功能为主.今天利 ...