时间戳分析(Java 版)

我们经常看到一个时间用long类型数据来表示,例如:1580704106823 表示当前时间:2020年02月03日12时28分26秒823毫秒

那么为什么时间可以用一个long类型数据来表示呢?下面我们来一点点的分析:

首先,介绍一个概念,时间戳:

百度百科:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数

上述介绍已经把为什么可以用long类型表示一个时间了,下面我们开始去验证这个是否正确

环境说明:咱们属于中国,时间戳是从北京时间1970年01月01日08时00分00秒000毫秒开始计时的

将总毫秒数:1580704106823 进行逐一分解

long time = 1580704106823L;
  • 计算总的秒数: 1580704106 秒
long seconds = time / 1000;
  • 计算总的分钟数:26345064 分钟
long minutes = time/ (1000 * 60);
  • 计算总的小时数:439084 小时
long hours = time / (1000 * 60 * 60);
  • 计算总的天数:18295 天
long days = time / (1000 * 60 * 60 * 24);

现在我们还需要知道 1970 - 2019 年之间有多少个闰年?

编写求一段时间内的闰年总数:

闰年定义:可以被 4 整除但不能被 100 整除,以及可以被 400 整除的年份

private static long getLeapYears(long start, long end) {
	long count = 0;
	for (long year = start; year <= end; year++) {
		if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
			count++;
		}
	}
	return count;
}
  • 计算 1970-2019 之间的闰年数:12个
long leapYears = getLeapYears(1970, 2019);

现在我们来算一下

  • 离 1970 年过去了多少年了:50年

(总的天数-闰年数)/ 365 = 时隔年数

long intervalYears = (days - leapYears) / 365;

上述 intervalYears = 50,表示离 1970 年已经过了 50 年了,正好验证:2020 = 1970 + 50

  • 除去年份干扰,算离2020年01月01日过去了多少天:33天
long intervalDays = days - (intervalYears * 365 + leapYears);

上述 intervalDays = 33,表示离2020年01月01日已经过了33天,正好验证:01月01日 + 33 天 = 02月03日

  • 除去天数干扰,算离2020年02月03日08时过去了多少小时:4时
long intervalHours = hours - days * 24;

上述 intervalHours = 4,表示离2020年02月03日08时已经过了4个小时,正好验证:08时 + 4时 = 12时

  • 除去小时干扰,算离2020年02月03日12时00分过去了多少分钟:28分
long intervalMinutes = minutes - hours * 60;

上述 intervalMinutes = 24,表示离2020年02月03日08时00分过去了28分钟,正好验证:00分 + 28分 = 28分

  • 除去分钟干扰,算离2020年02月03日12时28分00秒过去了多少秒:26秒
long intervalSeconds = seconds - minutes * 60;

上述 intervalSeconds,表示离2020年02月03日12时28分00秒过去了26秒,正好验证:00秒 + 26秒 = 26秒

  • 除去秒数干扰,算离2020年02月03日12时28分26秒000毫秒过去了多少毫秒:823毫秒
long intervalMilliseconds = time - seconds * 1000;

上述 intervalMilliseconds,表示离2020年02月03日12时28分26秒000毫秒过去了823毫秒,正好验证:000毫秒 + 823毫秒 = 823毫秒

经过上述的分析:我们明白了为什么一个时间可以用一个long类型存储,long类型存储的是1970年01月01日00秒000毫秒到现在的时间之间的间隔毫秒数

也就是:1970年01月01日00秒000毫秒 + 1580704106823毫秒 = 2020年02月03日12时28分26秒823毫秒

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值