时间戳与日期格式化工具

时间戳转日期
日期转时间戳
北京时间: -
时间戳基础知识

什么是时间戳?

时间戳(Timestamp)是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。它是一种时间表示方式,与时区无关,全球统一。

时间戳通常有两种表示方式:

  • 秒级时间戳:从1970年1月1日00:00:00 UTC到现在经过的秒数
  • 毫秒级时间戳:从1970年1月1日00:00:00 UTC到现在经过的毫秒数(1秒 = 1000毫秒)

GMT与UTC有什么区别?

GMT(格林威治标准时间):是指位于英国伦敦郊区的皇家格林威治天文台的标准时间,因为本初子午线被定义在通过那里的经线。

UTC(协调世界时):是最主要的世界时间标准,它基于国际原子时,并通过不规则的闰秒来抵消地球自转变慢的影响。

在实际应用中,GMT和UTC的时间几乎相同,但UTC更加精确,是现代计算机系统普遍采用的时间标准。

什么是闰秒?

闰秒是为了协调原子时间和地球自转时间而设立的调整机制。由于地球自转速度在逐渐减慢,为了使UTC时间与地球自转周期保持同步,国际计量组织会不定期地在UTC中插入"闰秒"。

当加入闰秒时,一分钟可能会有61秒,例如:23:59:59 → 23:59:60 → 00:00:00。这对计算机系统可能造成一些问题,因为大多数系统假设一分钟恰好是60秒。

什么是千年虫问题(Y2K Bug)?

千年虫问题是指在20世纪末期,许多计算机系统使用两位数字来表示年份(如"99"表示1999年)。当日期从1999年12月31日变为2000年1月1日时,这些系统可能会将"00"误解为1900年而非2000年,导致日期计算错误。

这个问题源于早期计算机存储空间有限,程序员为了节省空间而只用两位数字表示年份。为解决这个问题,全球花费了大量资源对系统进行修复,使其能够正确处理跨世纪的日期。

为什么使用时间戳?

时间戳有以下优势:

  • 全球统一,不受时区影响
  • 便于计算时间差
  • 占用存储空间小(通常只需一个整数)
  • 便于数据库排序和索引
  • 避免了日期格式不统一的问题

2038年问题

类似于千年虫问题,2038年问题是指使用32位有符号整数表示的Unix时间戳将在2038年1月19日03:14:07 UTC达到最大值(2^31-1)。超过这个时间点后,时间戳会溢出变为负数,系统可能会将日期误解为1901年。

现代系统大多已采用64位时间戳来解决这个问题,64位时间戳可以表示到约2920亿年后的日期,远超地球和太阳的预期寿命。

各语言获取时间戳API
JavaScript
// 获取毫秒级时间戳
const timestampMs = Date.now();
// 或
const timestampMs = new Date().getTime();

// 获取秒级时间戳
const timestampS = Math.floor(Date.now() / 1000);
PHP

// 获取毫秒级时间戳
$timestampMs = round(microtime(true) * 1000);

// 获取秒级时间戳
$timestampS = time();

Python
import time
import datetime

# 获取毫秒级时间戳
timestamp_ms = int(time.time() * 1000)
# 或
timestamp_ms = int(datetime.datetime.now().timestamp() * 1000)

# 获取秒级时间戳
timestamp_s = int(time.time())
# 或
timestamp_s = int(datetime.datetime.now().timestamp())
Java




// 获取毫秒级时间戳
long timestampMs = System.currentTimeMillis();

// 获取秒级时间戳
long timestampS = System.currentTimeMillis() / 1000;




C#

                            
// 获取毫秒级时间戳
long timestampMs = DateTimeOffset.Now.ToUnixTimeMilliseconds();

// 获取秒级时间戳
long timestampS = DateTimeOffset.Now.ToUnixTimeSeconds();


Go
import (
                                "time"
                            )

                            // 获取毫秒级时间戳
                            timestampMs := time.Now().UnixNano() / int64(time.Millisecond)

                            // 获取秒级时间戳
                            timestampS := time.Now().Unix()
Ruby
    # 获取毫秒级时间戳
    timestamp_ms = (Time.now.to_f * 1000).to_i
    
    # 获取秒级时间戳
    timestamp_s = Time.now.to_i
    
Swift
// 获取毫秒级时间戳
    let timestampMs = Int(Date().timeIntervalSince1970 * 1000)
    
    // 获取秒级时间戳
    let timestampS = Int(Date().timeIntervalSince1970)
MySQL
-- 获取毫秒级时间戳(MySQL 5.6+)
    SELECT UNIX_TIMESTAMP(NOW(3)) * 1000;
    
    -- 获取秒级时间戳
    SELECT UNIX_TIMESTAMP();
    SELECT UNIX_TIMESTAMP(NOW());
PostgreSQL
    -- 获取毫秒级时间戳
    SELECT EXTRACT(EPOCH FROM NOW()) * 1000;
    
    -- 获取秒级时间戳
    SELECT EXTRACT(EPOCH FROM NOW())::INTEGER;
    
SQL Server

    -- 获取毫秒级时间戳(SQL Server 2016+)
    SELECT DATEDIFF_BIG(MILLISECOND, '1970-01-01', GETUTCDATE());
    
    -- 获取秒级时间戳
    SELECT DATEDIFF(SECOND, '1970-01-01', GETUTCDATE());



Shell (Bash)
    #!/bin/bash
    
    # 获取秒级时间戳
    timestamp_s=$(date +%s)
    
    # 获取毫秒级时间戳
    timestamp_ms=$(($(date +%s%N)/1000000))
    
    echo "秒级时间戳: $timestamp_s"
    echo "毫秒级时间戳: $timestamp_ms"
C
#include 
    #include 
    #include 
    
    int main() {
        // 获取秒级时间戳
        time_t timestamp_s = time(NULL);
        
        // 获取毫秒级时间戳
        struct timeval tv;
        gettimeofday(&tv, NULL);
        long long timestamp_ms = tv.tv_sec * 1000LL + tv.tv_usec / 1000;
        
        printf("秒级时间戳: %ld\n", timestamp_s);
        printf("毫秒级时间戳: %lld\n", timestamp_ms);
        
        return 0;
    }





ASP/VBScript
<%
    ' 获取秒级时间戳
    Function GetUnixTimestamp()
        GetUnixTimestamp = DateDiff("s", "01/01/1970 00:00:00", Now())
    End Function
    
    ' 获取毫秒级时间戳
    Function GetUnixTimestampMs()
        Dim currentDate
        currentDate = Now()
        GetUnixTimestampMs = DateDiff("s", "01/01/1970 00:00:00", currentDate) * 1000
    End Function
    
    ' 使用示例
    Dim timestampS, timestampMs
    timestampS = GetUnixTimestamp()
    timestampMs = GetUnixTimestampMs()
    
    Response.Write "秒级时间戳: " & timestampS & "
" Response.Write "毫秒级时间戳: " & timestampMs & "
" %>
C++
    #include 
    #include 
    
    int main() {
        // 获取毫秒级时间戳 (C++11)
        auto now = std::chrono::system_clock::now();
        auto timestamp_ms = std::chrono::duration_cast(
            now.time_since_epoch()
        ).count();
        
        // 获取秒级时间戳
        auto timestamp_s = std::chrono::duration_cast(
            now.time_since_epoch()
        ).count();
        
        std::cout << "秒级时间戳: " << timestamp_s << std::endl;
        std::cout << "毫秒级时间戳: " << timestamp_ms << std::endl;
        
        return 0;
    }
Unix / Linux
    
    date +%s

    # 在 Linux 中,date +%s 命令用于显示当前时间的 Unix 时间戳(Unix Timestamp)
    # 即从 1970 年 1 月 1 日 00:00:00 UTC(协调世界时) 到当前时间的总秒数(不包括闰秒)。


    # date +%s	获取当前 Unix 时间戳(秒)
    # date -d @时间戳	将时间戳转为可读时间
    # date -d "YYYY-MM-DD HH:MM:SS" +%s	将指定时间转为时间戳









                            
汽配快车道 - WhatsApp管理解决方案

WhatsApp管理问题

  • 员工使用的WhatsApp账号太多,无法统一管理
  • 员工账号密码过程不透明,不利于订单跟踪
  • 客户想无缝连接一管理,用户画像不清晰
  • WhatsApp个人账号不利于连续管理,工作生活无法分开

WhatsApp营销问题

  • 无法快速批量获取目标WhatsApp账号
  • 网络不稳定,账号使用率低,群发消息易封号
  • 营销素材无标准化,营销转化效果差
  • 发消息后无法跟踪回复,客户线索无法跟踪
了解更多解决方案