1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 常见数据库时间戳格式化函数及用法(按时区格式化时间戳) java计算时区值

常见数据库时间戳格式化函数及用法(按时区格式化时间戳) java计算时区值

时间:2021-12-06 01:21:01

相关推荐

常见数据库时间戳格式化函数及用法(按时区格式化时间戳) java计算时区值

介绍下clickhouse、mysql、SQL server、Oracle数据库中将时间戳按时区进行格式化的函数及用法。

前提

默认传入的时间戳是UTC时间

函数

ClickHouse

formatDateTime

Functions for Working with Dates and Times | ClickHouse Docs

MySQL

from_unixtime

MySQL :: MySQL 8.0 Reference Manual :: 12.7 Date and Time Functions

convert_tz

MySQL :: MySQL 8.0 Reference Manual :: 12.7 Date and Time Functions

date_format

MySQL :: MySQL 8.0 Reference Manual :: 12.7 Date and Time Functions

SQL server

DATEADD

DATEPART

日期和时间数据类型及函数 - SQL Server (Transact-SQL) | Microsoft Docs

CONVERT

CAST 和 CONVERT (Transact-SQL) - SQL Server | Microsoft Docs

Oracle

TZ_OFFSET

NUMTODSINTERVAL

TO_CHAR (datetime)

实践

将UTC时间戳 165231000 转换为北京时间 -05-12 15:33:40

ClickHouse:select formatDateTime(toDateTime(165231000/1000),'%F %T', 'Asia/Shanghai')MySQL:select date_format(CONVERT_TZ(from_unixtime(165231000 / 1000, '%Y-%m-%d %H:%i:%s'),'+00:00','+08:00'),'%Y-%m-%d %T')SQL server:select CONVERT(varchar(19),DATEADD(SS,165231000 / 1000 + 8 * 3600,'1970-01-01 00:00:00'),121)Oracle:select TO_CHAR((TIMESTAMP '1970-01-01 00:00:00' AT TIME ZONE 'UTC' + numtodsinterval(165231000 /1000 + 8 * 3600 ,'second')) AT time zone tz_offset('Asia/Shanghai'),'YYYY-MM-DD HH24:mi:ss') from dual

SQL server和Oracle对于时间戳的计算需要通过1970-01-01 00:00:00 + 时间戳的方式

格式化时希望增加汉字或其他字符,比如想要得到 “/5月”这样的

ClickHouse:select formatDateTime(toDateTime(165231000/1000),'%Y/%m月', 'Asia/Shanghai')MySQL:select date_format(CONVERT_TZ(from_unixtime(165231000 / 1000, '%Y-%m-%d %H:%i:%s'),'+00:00','+08:00'),'%Y/%m月')SQL server:select CONVERT(varchar(7),DATEADD(SS,165231000 / 1000 + 8 * 3600,'1970-01-01 00:00:00'),111) + ‘月’ (截取前7个字符)Oracle:select TO_CHAR((TIMESTAMP '1970-01-01 00:00:00' AT TIME ZONE 'UTC' + numtodsinterval(165231000 /1000 + 8 * 3600 ,'second')) AT time zone tz_offset('Asia/Shanghai'),'YYYY/MM') || '月’ from dual

若是要格式化为“5月”,那么对于SQL server和Oracle的支持就不是很好

java中时区值计算

//时区处理TimeZone timeZone = TimeZone.getTimeZone(cqb.getTimeZone());//时区值long rawOffset = timeZone.getRawOffset();int hour =(int) rawOffset / 1000 / 60 / 60;//可为负数System.out.println(hour);

Note:

java中日期格式化字符串需要转义,例如:%Y-%m-%d 需要写成 %%Y-%%m-%%d

参考资料

/2441543.html/sql/func-datepart.html/educast/article/details/6883231/sql/func_date_format.asp

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。