键盘敲烂,月薪过万作业不做,等于没学
当前系列: 编程语言 修改讲义

时间是什么?——这是一个哲学问题


严谨的新闻播报

今天是2021年8月27日,农历七月二十

当地时间晚8点

说明了什么问题?

  • 历法:(太)阳历/阴(月亮)历,以及阴阳历。具体又细分:公(基督)历、中国农历、印度历、伊斯兰历、犹太历……
  • 时区:请复习地理知识。@想一想@:北京时间是不是就是北京时区?

还有什么干扰项?夏令时。(我国从1986年到1991年)

爽不爽,惊喜不惊喜?

标准时

  • GMT(Greenwich Mean Time):格林威治标准时间
  • UTC(Coordinated Universal Time):世界协调/标准/统一时间,以格林威治时间GMT为标准,进行修正后的新时标,比GMT来得更加精准
  • ISO8601标准:是日期和时间的表示方法。统一按年月日小时分钟秒这个顺序写,不要乱七八糟的:12:03 27/8/2021,或者12:03 27/08/2021,再或者 27/8/2021 12:03……

以上,就给我们编程使用时间带来了麻烦。



千年虫问题

千禧年前后出生的青少年们或许很少有人知道“千年虫”。

大约在 20 世纪 80 年代中期以前投用的系统上,囿于存储空间有限,再加上人们普遍觉得系统更新会很快,所以程序员大多采用两位数来表示年份,比如 06/15/98,而不是 06/15/1998。但是到了 2000 年,系统只知道是 01/01/00,不知道这是 1900 还是 2000。

嗯,总有一天,程序员会毁灭地球的。


时间戳

计算机的处理简单粗暴:

  1. 万物皆可二进制
  2. 用一个整数记录:和GMT 1970年1月1日凌晨零点(UNIX时间原点)之间的(毫/微/纳)秒数差

这样做有两个问题:

  1. 1970年之前的时间咋办?凉拌。打补丁呗,一些软件又推出了1900年1月1日,或者0000年01月01日为原点的时间类型数据。那么系统和系统之间的转换就又是一个问题。
  2. 32位的操作系统,最多能记录的时间2038年就要到期了,咋办?


PS:此外时间戳还有时间电子认证的含义,此处略过。


时间类

@想一想@:能不能用一个字符串来表示时间?

几乎所有编程语言都内置了时间(包含年月日的日期,和小数分钟数的时间,比如Date/DateTime/Calendar)类,

封装了和时间运算相关的各种属性和方法。

一般包括:

  • 获取当前时间,设定一个时间
  • 获取某个时间的年月日、星期几、小时分钟数等的属性
  • 获得某个时间若干时间段之前/后的方法,
  • 两个时间点之间的比较,获取其间时间段
  • 日期和字符串之间的转换
  • 各个时区、日历间的转换
  • ……

我们尽量使用内置时间类来完成相应功能。


作业

  1. 读懂千年虫问题的报道,为什么2020年和2038年我们仍然会面临问题?

----- 以下分别用Java/C#/JavaScript实现 -----

  1. “一起帮”为了反爬虫访问,限定了用户的查询次数,即:每5分钟内最多不能访问超过若干个页面。请设计一个函数hasExpired(last),能够检查当前时间是否已超过上次记录时间(last)5分钟
  2. 类似第1题,“一起帮”还会检查用户上次登录是否已过24小时,请设计一个函数 isNewLogin(last)完成检查。
  3. 生成一个函数toChinese(),可将传入的日期参数(如:new Date())转换成中文日期格式(如:2019年10月4日 16点54分)
  4. 源栈的学费是按周计费的,所以请实现这两个函数:
    1. GetDate(),能计算一个日期若干(日/周/月)后的日期
    2. ShowWeeksIn()给定任意一个年份,就能按周排列显示每周的起始日期,例如:
      第1周 2021年1月2日 - 2021年1月8日
      第2周 2021年1月9日 - 2021年1月15日
      ……
      ……
      第x周 2021年12月x日 - 2021年12月28日
学习笔记
源栈学历
键盘敲烂,月薪过万作业不做,等于没学

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 编程语言 中继续学习:

上一课: UML:类图 / ……

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码