扩展学习之时间戳趣谈

2023-10-17 08:53:54 浏览数 (1)

一、介绍

时间戳:一份数据在特定时间点存在的可验证的数据。

Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp),是从1970年1月1日(UTC/GMT的午夜)开始到现在所经过的秒数(格林威治时间1970年01月01日00时00分00秒、北京时间1970年01月01日08时00分00秒),不考虑闰秒。

UNIX时间戳的 0 按照 ISO 8601 规范为 :1970-01-01T00:00:00Z.

一个小时表示为UNIX时间戳格式为:3600秒;一天表示为UNIX时间戳为86400秒,闰秒不计算。

最小值(秒):0                                    始于(北京时间):1970-01-01 08:00:00

纪元时间 ,都是基于格林威治标准时间的,即GMT时间。

标准时间应该是1970-01-01 00:00:00,中国处于东八区,所以时间会比标准时间早8小时

二、转换工具

UNIX 时间戳转换工具地址 :   https://c.runoob.com/front-end/852

三、获取Unix时间戳的指令

编程语言

指令

Java

System.currentTimeMillis() / 1000 [3]

JavaScript

Math.round(new Date().getTime()/1000) getTime()返回数值的单位是毫秒

Microsoft .NET / C#

epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000

MySQL

SELECT unix_timestamp(now())

Perl

time

PHP

time()

PostgreSQL

SELECT extract(epoch FROM now())

Golang

time.now().Unix()

Python

先 import time 然后 time.time() 返回1476929706.5320001 可以 int(time.time())

Ruby

获取Unix时间戳:Time.now 或 Time.new 显示Unix时间戳:Time.now.to_i

SQL Server

SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE())

Unix /Linux/类UNIX/OS X

date %s

VBScript / ASP

DateDiff("s", "01/01/1970 08:00:00", Now())

lua

os.time() 返回时间戳

FreeSWITCH

fs_cli > strepoch 或者: fs_cli > eval ${strepoch()} 或者: (在 freeswitch里面,获取linux系统的时间戳) fs_cli > system date %s

其他操作系统 (如果Perl被安装在系统中)

命令行状态:perl -e "print time"

四、普通时间转Unix时间戳

编程语言

指令

Java

long epoch = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse("01/01/1970 01:00:00");

JavaScript

var commonTime = new Date(Date.UTC(year, month - 1, day, hour, minute, second))

MySQL

SELECT unix_timestamp(time) 时间格式: YYYY-MM-DD HH:MM:SS 或 YYMMDD 或 YYYYMMDD

Perl

先 use Time::Local 然后 my $time = timelocal($sec, $min, $hour, $day, $month, $year);

PHP

mktime(hour, minute, second, day, month, year)

PostgreSQL

SELECT extract(epoch FROM date('YYYY-MM-DD HH:MM:SS'));

Python

先 import time 然后 int(time.mktime(time.strptime('YYYY-MM-DD HH:MM:SS', '%Y-%m-%d %H:%M:%S')))

Ruby

Time.local(year, month, day, hour, minute, second)

SQL Server

SELECT DATEDIFF(s, '1970-01-01 00:00:00', time)

Unix / Linux

date %s -d"Jan 1, 1970 00:00:01"

VBScript / ASP

DateDiff("s", "01/01/1970 00:00:00", time)

五、扩展

闰秒

科学上有两种时间计量系统:基于地球自转的天文测量而得出的"世界时"和以原子振荡周期确定的"原子时""世界时"由于地球自转的不稳定(由地球物质分布不均匀和其它星球的摄动力等引起的)会带来时间的差异,"原子时"(一种较恒定的时制,由原子钟得出)则是相对恒定不变的。这两种时间尺度速率上的差异,一般来说一至二年会差大约1秒时间。

1971年国际计量大会通过决议:使用"协调世界时"来计量时间。当"协调世界时""世界时"之差超过0.9秒时,国际地球自转服务组织(IERS)就负责对"协调世界时"拨快或拨慢1秒,这就是闰秒

协调世界时(英:Coordinated Universal Time ,法:Temps Universel Coordonné),又称世界统一时间,世界标准时间,国际协调时间。英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。

协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。

0 人点赞