文档章节

给定两个时间(Timestamp),返回时段总天数——java

Z
 Zoe_2016
发布于 2017/08/14 11:45
字数 379
阅读 39
收藏 0
/**
	 * The number of times crossed.
	 * 
	 * @param startTime
	 *            The start time of period.
	 * @param endTime
	 *            The end time of period.
	 * @return sub of day.
	 */
	public int subtractDay(Timestamp startTime, Timestamp endTime) {
		int result;
		if (getYear(startTime) == getYear(endTime)) {
			result = subtractDayOfSameYear(startTime, endTime);
		} else {
			result = subtractDayOfDifferentYear(startTime, endTime);
		}
		return result;
	}
/**
	 * Get the number of day from start to end time.(startTime.year !=
	 * endTime.year)
	 * 
	 * @param startTime
	 *            The start time of period.
	 * @param endTime
	 *            The end time of period.
	 * @return The days.
	 */
	public int subtractDayOfDifferentYear(Timestamp startTime, Timestamp endTime) {
		int result = 0;
		Timestamp t1 = new Timestamp(0);
		Timestamp t2 = new Timestamp(0);
		Calendar c1 = Calendar.getInstance();
		Calendar c2 = Calendar.getInstance();
		int year1 = getYear(startTime);
		int year2 = getYear(endTime);
		int month1 = getMonth(startTime);
		int month2 = getMonth(endTime);
		int firstTotalDayOfMonth;
		if (year1 == year2) {
			System.out.println("ERROR: Pleace use different year!!!");
			return -1;
		} else {
			// head:
			c1.set(year1, month1 - 1, getDay(startTime), 0, 0, 0);
			firstTotalDayOfMonth = c1.getActualMaximum(c1.DATE);
			c2.set(year1, month1 - 1, firstTotalDayOfMonth, 0, 0, 0);
			t1.setTime(c1.getTimeInMillis());
			t2.setTime(c2.getTimeInMillis());
			result += subtractDayOfSameYear(t1, t2);
			// bottom:
			c1.set(year2, month2 - 1, 1, 0, 0, 0);
			c2.set(year2, month2 - 1, getDay(endTime), 0, 0, 0);
			t1.setTime(c1.getTimeInMillis());
			t2.setTime(c2.getTimeInMillis());
			result += subtractDayOfSameYear(t1, t2) + 1;
			// Middle:
			if (year2 - year1 > 1) {
				for (int i = 1; i < year2 - year1; i++) {
					c1.set(year1, month1 + i - 1, 1, 0, 0, 0);
					result += c1.getActualMaximum(c1.DAY_OF_YEAR);
				}
			}
		}
		return result;
	}
/**
	 * Get the number of day from startTime to endTime(startTime.year =
	 * endTime.year)
	 * 
	 * @param startTime
	 *            The start time of time period.
	 * @param endTime
	 *            The end time of time period.
	 * @return The days.
	 */
	public int subtractDayOfSameYear(Timestamp startTime, Timestamp endTime) {
		Calendar cal = Calendar.getInstance();
		int year1 = getYear(startTime);
		if (year1 != getYear(endTime)) {
			System.out.println("ERROR: The time is not the same year!!!");
			return -1;
		}
		int day1 = getDay(startTime);
		int day2 = getDay(endTime);
		int month1 = getMonth(startTime);
		int month2 = getMonth(endTime);
		int result;
		if (month2 == month1) {
			result = day2 - day1;
//			System.out.println(month1 + " " + month2 + " " + day1 + " " + day2 + " result:" + result);
		} else {
			cal.set(year1, month1 - 1, day1, 0, 0, 0);
			result = cal.getActualMaximum(cal.DATE) - day1;
			result += day2;
			if (month2 - month1 > 1) {
				for (int i = 1; i < month2 - month1; i++) {
					cal.set(year1, month1 + i - 1, 1, 0, 0, 0);
					result += cal.getActualMaximum(cal.DATE);
				}
			}
		}
		return result;
	}

 

© 著作权归作者所有

Z
粉丝 0
博文 36
码字总数 12725
作品 0
广州
私信 提问
201709记录(elasticsearch)

1 Easy Go Programming Setup for Windows http://www.wadewegner.com/2014/12/easy-go-programming-setup-for-windows/ 2 本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序......

bapleliu
2017/09/01
3
0
MySQL的FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别

Unix时间戳(Unix timestamp),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。 在MySQL中如何格式化时间戳? 在mysql中因为timestamp无法支持到毫秒...

度外网络
2012/09/26
11.6K
0
java和mysql之间的时间日期类型传递

mysql(版本:5.1.50)的时间日期类型如下: datetime 8bytes xxxx-xx-xx xx:xx:xx 1000-01-01 00:00:00到9999-12-31 23:59:59 timestamp 4bytes xxxx-xx-xx xx:xx:xx 1970-01-01 00:00:01到......

为了美好的明天
2017/10/31
50
0
Java 8时间和日期API 20例

伴随lambda表达式、streams以及一系列小优化,Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实例来学习如何使用新API。Java处理日期、日历和时间的方式一直为社区所诟病,将...

黄梦巍
2015/06/19
460
0
关于 JDBC 您可能不知道的 5 件事

JDBC,即 Java™ Database Connectivity 是 JDK 中最常用的包之一,但是只有极少数开发人员能够充分使用其完整的 — 或最新的 — 功能。Ted Neward 提供了像 这样的最新 JDBC 功能,可以在系...

红薯
2010/09/26
483
3

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
9
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
929
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部