UTC时间、GMT时间、CST时间(北京时间)、时间戳

news/2025/2/10 13:32:20/

一、几个时间相关的概念。

GMT时间:Greenwich Mean Time,格林尼治平时,又称格林尼治平均时间或格林尼治标准时间。是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间。

GMT存在较大误差,因此现在已不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC)

UTC时间:Universal Time Coordinated,中文名称:世界标准时间或世界协调时。

UTC时间可以理解为全世界都公用的一个时间。它实际上反映了一种约定,即为全世界所认可的一个统一时间,而不是某特定地区的时间。

中国人常用的北京时间比UTC时间快8个小时。也即UTC时间凌晨0点时,北京时间已经是早上8点,这就是为啥全世界人往往不直接用UTC时间计时原因。

CST时间:China Standard Time,即中国标准时间。在时区划分上,属东八区,比协调世界时早8小时,记为UTC+8

UNIX时间戳(timestamp)计算机中的UNIX时间戳是以GMT/UTC时间1970-01-01T00:00:00为起点,到当前具体时间的秒数(不考虑闰秒)。这样做的目的,主要是通过“整数计算”来简化计算机对时间操作的复杂度。

二、Linux 中几种时间的操作与转化

2.1、获取当前系统时区

可以通过 date +%Z 或者 timedatectl

在这里插入图片描述

[root@chb1 ~]# date +%z
+0800
[root@chb1 ~]# 

查看时区配置文件
在这里插入图片描述

2.2、获取本地时间

[root@chb1 ~]# date
Sat Apr 22 12:14:21 CST 2023
[root@chb1 ~]# date +'%Y-%m-%d %H:%M:%S.%s'
2023-04-22 12:14:22.1682136862
[root@chb1 ~]# 

2.3、获取 UTC 时间

# -u 获取 utc 时间
[root@chb1 ~]# date +'%Y-%m-%d %H:%M:%S.%s' -u
2023-04-22 04:15:36.1682136936  
# 与 本地时间相差八小时
[root@chb1 ~]# 

本地时间和utc时间相差八小时

[root@chb1 ~]# date; date -u
Sat Apr 22 12:16:47 CST 2023
Sat Apr 22 04:16:47 UTC 2023
[root@chb1 ~]# 

2.4、获取时间戳,不管是UTC时间还是北京时间 时间戳都是一样

是以GMT/UTC时间1970-01-01T00:00:00为起点,到当前具体时间的秒数(不考虑闰秒)

[root@chb1 ~]# date; date -u
Sat Apr 22 12:16:47 CST 2023
Sat Apr 22 04:16:47 UTC 2023[root@chb1 ~]# date +%s;date +%s -u
1682137420
1682137420

2.5、将时间戳转为 时间字符串


[root@chb1 ~]# date -d @1682137164
Sat Apr 22 12:19:24 CST 2023
[root@chb1 ~]# date -d @1682137164 +'%Y-%m-%d %H:%M:%S.%s'
2023-04-22 12:19:24.1682137164
[root@chb1 ~]# date -d @1682137164 +'%Y-%m-%d %H:%M:%S.%s' -u
2023-04-22 04:19:24.1682137164

三、SparkSQL

3.1、获取时间戳

3.1.1、UNIX_TIMESTAMP

spark-sql>  select UNIX_TIMESTAMP(), -- 当前的时间戳  >  UNIX_TIMESTAMP('1970-01-01', 'yyyy-MM-dd'), -- 指定本地时间转为时间戳>  UNIX_TIMESTAMP('1970-01-01T00:00:00Z', "yyyy-MM-dd'T'HH:mm:ssX"), -- utc时间转为时间戳>  UNIX_TIMESTAMP('1970-01-01 00:00:00 UTC', "yyyy-MM-dd HH:mm:ss z") -- utc时间转为时间戳>  ;
1682168617      -28800  0       0
Time taken: 0.077 seconds, Fetched 1 row(s)
spark-sql> 

问题: 如果 UTC 时间有 纳秒, UNIX_TIMESTAMP

spark-sql> select UNIX_TIMESTAMP('1970-01-01 00:00:23.123456789 UTC', "yyyy-MM-dd HH:mm:ss.SSS z");
NULL  -- 返回空值
Time taken: 0.097 seconds, Fetched 1 row(s)
spark-sql> 解决
select UNIX_TIMESTAMP(concat_ws(' ', substr('1970-01-01 00:00:23.123456789 UTC', 0,19),  -- yyyy-MM-dd HH:mm:sssubstr('1970-01-01 00:00:23.123456789 UTC', 31)),   -- UTC"yyyy-MM-dd HH:mm:ss z")  -- 时间戳 秒值* 1000000000  -- 转为纳秒+ cast (substr('1970-01-01 00:00:23.123456789 UTC', 21,9) as bigint)  -- 截取纳秒
;

注意 时间的格式 https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html
在这里插入图片描述

3.1.2、to_unix_timestamp

spark-sql>  select>  to_unix_timestamp('1970-01-01', 'yyyy-MM-dd'), -- 指定本地时间转为时间戳>  to_unix_timestamp('1970-01-01T00:00:00Z', "yyyy-MM-dd'T'HH:mm:ssX"), -- utc时间转为时间戳>  to_unix_timestamp('1970-01-01 00:00:00 UTC', "yyyy-MM-dd HH:mm:ss z") -- utc时间转为时间戳>  ;
-28800  0       0

3.2、 时间戳转为指定时间字符串

from_unixtime(unix_time[, fmt])	Returns `unix_time` in the specified `fmt`.spark-sql>  select from_unixtime(0),>  from_unixtime(0, 'yyyy-MM-dd HH:mm:ss'),>  from_unixtime(0, 'yyyy-MM-dd HH:mm:ss z');
1970-01-01 08:00:00     1970-01-01 08:00:00     1970-01-01 08:00:00 CST

3.3、UTC时间与其他时间转化

3.3.1、to_utc_timestamp 指定时间的时间转为 UTC 时间

to_utc_timestamp(timestamp,  -- 指定时间timezone) 	 -- 指定分区spark-sql> SELECT to_utc_timestamp('1970-01-01', 'PRC');
1969-12-31 16:00:00spark-sql>  SELECT to_utc_timestamp('1970-01-01 00:00:00.123456789', 'PRC');
1969-12-31 16:00:00.123456

3.3.2、from_utc_timestamp 将utc时间 转为指定时区时间

from_utc_timestamp(timestamp,  		-- utc时间 timezone)        -- 目的时间spark-sql> select from_utc_timestamp('1970-01-01 00:00:23', 'PRC');
1970-01-01 08:00:23-- 错误使用
spark-sql>  select from_utc_timestamp('1970-01-01T00:00:00Z', 'PRC');
1970-01-01 16:00:00
spark-sql>  select from_utc_timestamp('1970-01-01 00:00:00 UTC', 'PRC');
1970-01-01 16:00:00

http://www.ppmy.cn/news/50923.html

相关文章

基于Java+Springboot+vue网上商品订单转手系统设计和实现

基于JavaSpringbootvue网上商品订单转手系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式…

2023年MathorCup数模D题赛题解题思路

MathorCup俗称妈杯,是除了美赛国赛外参赛人数首屈一指的比赛,而我们的妈杯今天也如期开赛。今年的妈杯难度,至少在我看来应该是2023年截至目前来讲最难的一场比赛。问题的设置、背景的选取等各个方面都吐露着我要难死你们的想法。难度是恒定的…

chmod 命令 (chmod 0660)

chmod的作用: 用于设置文件所有者和文件关联组的命令,就是控制用户的权限命令 注意事项: chown 需要超级用户 root 的权限才能执行此命令。 自己常用chmod 命令是 chmod 777 * 给所有文件权限 chmod 777 文件名 给单独文件权限 这个777 是怎么来的, 或者chmod 0660 这…

警惕读书无用论,要知道一个人最可怕的就是精神世界的贫瘠和荒凉

孔乙已是鲁迅笔下人物,穷困流倒还穿着象征读书人的长衫,迁腐、麻木。最近,大家自我调佩是“当代孔乙己”,学历成为思想负担,找工作时高不成低不就。 一、社会对于学历和职业之间的关系认知是怎样的? 学历不…

目标检测按照多类一起和单个类进行NMS操作

def non_max_suppression(prediction, conf_thres0.25, iou_thres0.45, classesNone, agnosticFalse, multi_labelFalse, labels(), max_det300): 四.将所有的类别框当做一个类别进行nms c x[:, 5:6] * (0 if agnostic else max_wh) # classes boxes, scores x[:, :4] c…

LeetCode 1027. 最长等差数列

【LetMeFly】1027.最长等差数列 力扣题目链接:https://leetcode.cn/problems/longest-arithmetic-subsequence/ 给你一个整数数组 nums,返回 nums 中最长等差子序列的长度。 回想一下,nums 的子序列是一个列表 nums[i1], nums[i2], ..., n…

FPGA目前就业形势咋样?来听听业内工程师的看法

看到网上有一个问题很火:2023了,FPGA目前就业形势咋样?很多同学也对这个方向比较感兴趣,下面就来一起了解一下吧。 FPGA岗位有哪些? 从芯片设计流程来看,FPGA岗位可以分四类 产品开发期:FPGA系统架构师 …

如何实现24小时客户服务

许多企业都有着这样的愿望:在不增加客服人员的同时能实现24小时客户服务。 那么有没有什么方法可以实现这一想法呢?在想解决方案之前我们可以先来谈谈客服的作用。 客服的作用主要为以下2点: 帮助用户更快地了解产品(减轻产品的…