Python Django MySQL,时区、日期、时间戳,写下这个标题的时候,头脑里面回荡着火车上的经典广告词:啤酒、饮料、矿泉水,花生、瓜子、八宝粥。当然本文跟这些零食吃喝没有关系,我们主要来聊聊时间问题。
环境说明:
1、约定:
本文中的“时间”,如未特别说明均指“日期+时间”,即形如“%Y-%m-%d %H:%M:%S”,或“yyyy-mm-dd HH:MM:SS” 等包含日期和时间点的值,可能包含形如 “.fraction” 的毫秒级的数值以及时区标识。
2、软件版本:
Python:2.7.10
Django:1.11.12 final
MySQL:5.7.18
3、基础数据:
Django Model:
class IcsServiceStatusModel(models.Model):
class Meta:
db_table = 'ics_service_status'
app_label = 'ics_meta'
objects = SelfDefinedManager()
id = models.AutoField(primary_key=True)
pub_id = models.CharField(max_length=15)
service_mode = models.SmallIntegerField(max_length=5)
current_session = models.CharField(max_length=50)
last_msg_dt = models.DateTimeField()
created_at = models.DateTimeField()
updated_at = models.DateTimeField()
MySQL 数据表:
CREATE TABLE IF NOT EXISTS `ics_service_status` (
`id` int(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`pub_id` varchar(15) NOT NULL,
`service_mode` tinyint(5) NOT NULL,
`current_session` varchar(50) NOT NULL,
`last_msg_dt` datetime NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='智能客服服务状态跟踪表' $$
知识点一、计算机上的时间表示
1、时间的常规表示
时间通常分为日期和时刻,表示为 y 年 m 月 d 日 H 时 M 分S 秒。几个单位之间的换算简单计为1年=365天(闰年366天),1个月=28天、29天、30天或31天(分别对应平年的2月,闰年的2月,3、6、9、11月,1、3、5、7、8、10、12月),1天=24小时,1小时=60分钟,1分钟=60秒。经典格式:yyyy-mm-dd HH:MM:SS。
2、时区
太阳一升一落一天过去了。毛爷爷说“青年人好像早晨八九点钟的太阳”,我们可以很直观地感受到八九点正式太阳升起后两三个小时正挂在半空的时候。同样的这句话换作是西半球的美国人、南半球的巴西人、赤道上的印尼人来理解也都是不会有问题的。因为我们日常生活中采用的计时方式都是参考太阳的移动周期来确定时刻的(比如中国的日晷):一天分为24个小时,太阳的照射下,物体的影子最短的时候为正午12点,前后均分,各12个小时,由此确定的时间为地方时,或本地时间(Local Time)。地理知识告诉我们,地球的自传、绕太阳公转使得让物体的影子最短的太阳需要由东到西逐次照射到地球的每个角落。所以我们看到的八九点钟的太阳跟外国人眼中的八九点钟的太阳已经不是同一个。这种时间表示方式方便在世界各地的人们相对统一地建立时间与环境的对应关系,由此产生便于沟通交流的意识。然而不同经度上的人们,尤其是跨度比较大的两个地方,如果都使用各自本地的时间交流的话就要出乱子了。已知华盛顿的正午比北京的正午来的晚12个小时。假如华盛顿飞北京要13个小时,身居北京的小丽晚上8点吃过晚饭后就给美国的好朋友凯特打电话说:“明天晚上8点去我家参加生日派对,傍晚6点去机场接你”。凯特是个很守时的小朋友。他想傍晚6点要飞到北京,总共又要飞13个小时,那岂不是要早晨5点就出发了?于是乎第二天凯特起了个大早,5点天还蒙蒙亮飞机准时起飞了。手上捧着精心挑选的礼物,期待着快点送给小丽。13个小时过后飞机平稳地降落在北京的机场,在机场的到达厅他没有看到小丽,太阳刚刚升起,路边的摊贩正在叫卖早餐。凯特打电话给小丽,却被臭骂了一顿“你为什么不准时参加我的生日派对?” 这是为啥捏?
为了便于不同地区的人们交流时间,地球人需要一个统一的标准时间(UTC,Coordinated Universal Time, 协调世界时,诞生于1972年;注1:与世界时UT相差±0.9s;注2:UTC 基于TAI,即International Atomic Time,国际原子时,计算秒)。大伙约定以东经0°(也是西经0°,俗称本初子午线)所在地区的地方时的中午12点作为世界标准时间的0点。同时东经180