将Unix时间戳转换成北京时间
将北京时间转换成Unix时间戳
Timestamp即时间戳,它表示某一时间的唯一标识。在Unix和许多Unix-like系统中,时间戳通常被定义为自1970年1月1日(UTC时区)午夜起的秒数(不包含闰秒)。这样的时间戳通常被称为Unix Timestamp。
定义:时间戳是一种能表示一份数据在某个特定时间点已经存在的、完整的、可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。
作用:它可以用来记录数据的创建、修改或访问时间,为数据提供时间上的标识,确保数据的时间顺序和完整性,在很多领域都有重要应用。
获取当前时间戳:
PHP: time()获取秒级时间戳,microtime(true)获取毫秒级时间戳
JavaScript: Date.now()获取毫秒级时间戳,Math.floor(Date.now()/1000)获取秒级时间戳
Python: import time; time.time()获取带毫秒的时间戳
Java: System.currentTimeMillis()/1000获取秒级时间戳,System.currentTimeMillis()获取毫秒级时间戳
Go: time.Now().Unix()获取秒级时间戳,time.Now().UnixNano()/1e6获取毫秒级时间戳
Ruby: Time.now.to_i获取秒级时间戳,Time.now.to_f获取带毫秒的时间戳
时间戳转日期:
PHP: date('Y-m-d H:i:s', $timestamp)
JavaScript: new Date(timestamp * 1000).toLocaleString()
Python: datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')
Java: new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(timestamp * 1000L))
Go: time.Unix(timestamp, 0).Format("2006-01-02 15:04:05")
Ruby: Time.at(timestamp).strftime("%Y-%m-%d %H:%M:%S")
日期转时间戳:
PHP: strtotime('2024-01-01 00:00:00')
JavaScript: new Date('2024-01-01').getTime()/1000
Python: int(time.mktime(time.strptime('2024-01-01 00:00:00', '%Y-%m-%d %H:%M:%S')))
Java: new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2024-01-01 00:00:00").getTime()/1000
Go: time.Parse("2006-01-02 15:04:05", "2024-01-01 00:00:00").Unix()
Ruby: Time.parse("2024-01-01 00:00:00").to_i
时区问题:时间戳本身是不带时区信息的,在转换时需注意当前系统时区设置。建议存储UTC时间戳,显示时再根据用户时区转换。
2038年问题:32位系统的Unix时间戳最大值为2147483647,对应到2038年1月19日03:14:07。超过这个时间会发生溢出,建议使用64位时间戳。
精度问题:根据实际需求选择秒级(10位)或毫秒级(13位)时间戳。在JavaScript中Date.now()返回的是毫秒级时间戳,需要注意转换。
格式转换:在不同编程语言间传递时间时,建议统一使用时间戳,避免各种日期格式带来的解析问题。