时间戳资源

编程语言时间戳对比

编程语言时间戳对比

流行编程语言的时间戳操作快速参考。

获取当前时间戳

语言毫秒微秒
JavaScriptMath.floor(Date.now() / 1000)Date.now()performance.now()
Pythonint(time.time())int(time.time() * 1000)time.time_ns() // 1000
JavaSystem.currentTimeMillis() / 1000System.currentTimeMillis()Instant.now().getEpochSecond()
Gotime.Now().Unix()time.Now().UnixMilli()time.Now().UnixMicro()
PHPtime()microtime(true) * 1000microtime(true) * 1000000
RubyTime.now.to_iTime.now.to_f * 1000Time.now.to_r
C#DateTimeOffset.UtcNow.ToUnixTimeSeconds()DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()-
SwiftDate().timeIntervalSince1970Int(Date().timeIntervalSince1970 * 1000)-

时间戳转日期

语言代码
JavaScriptnew Date(timestamp * 1000)
Pythondatetime.fromtimestamp(timestamp)
JavaInstant.ofEpochSecond(timestamp)
Gotime.Unix(timestamp, 0)
PHPdate('Y-m-d H:i:s', $timestamp)
RubyTime.at(timestamp)
C#DateTimeOffset.FromUnixTimeSeconds(timestamp)
SwiftDate(timeIntervalSince1970: TimeInterval(timestamp))

日期转时间戳

语言代码
JavaScriptMath.floor(date.getTime() / 1000)
Pythonint(date.timestamp())
Javadate.toEpochSecond(ZoneOffset.UTC)
Godate.Unix()
PHPstrtotime('2024-01-01')
Rubydate.to_i
C#((DateTimeOffset)date).ToUnixTimeSeconds()
SwiftInt(date.timeIntervalSince1970)

格式化

语言代码
JavaScriptdate.toISOString()date.toLocaleString()
Pythondate.strftime('%Y-%m-%d %H:%M:%S')
JavaDateTimeFormatter.ISO_DATE_TIME.format(date)
Godate.Format(time.RFC3339)
PHPdate('Y-m-d H:i:s', $timestamp)
Rubydate.strftime('%Y-%m-%d %H:%M:%S')
C#date.ToString("yyyy-MM-dd HH:mm:ss")
SwiftdateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

时区处理

语言UTC本地时间转换
JavaScriptnew Date().toISOString()new Date().toLocaleString()date.toLocaleString('en-US', {timeZone: 'UTC'})
Pythondatetime.utcnow()datetime.now()date.astimezone(timezone('UTC'))
JavaInstant.now()LocalDateTime.now()date.atZone(ZoneId.of("UTC"))
Gotime.Now().UTC()time.Now()date.In(time.UTC)
PHPgmdate()date()date_default_timezone_set('UTC')
RubyTime.now.utcTime.nowTime.now.getutc
C#DateTime.UtcNowDateTime.NowTimeZoneInfo.ConvertTimeToUtc(date)
SwiftDate() (内部始终UTC)Date()Calendar.current.dateComponents

主要差异

纪元起点

  • 所有语言使用 Unix纪元:1970年1月1日 00:00:00 UTC
  • 例外:GPS时间 使用1980年1月6日
  • TAI 使用1958年1月1日

精度

  • :最常见,10位数字(直到2286年)
  • 毫秒:13位数字,JavaScript默认
  • 微秒:16位数字
  • 纳秒:19位数字,某些系统使用

时区存储

  • JavaScript:Date对象无时区,使用浏览器时区
  • Python:Naive vs Aware datetime对象
  • Java:Instant (UTC) vs ZonedDateTime (带时区)
  • Go:Location附加到Time对象
  • Ruby:Time对象包含时区偏移
  • C#:DateTimeKind (Unspecified, Utc, Local)
  • Swift:Date始终UTC,Calendar处理时区

最佳实践

  1. 数据库中始终存储UTC时间
  2. 仅在显示时转换为本地时间
  3. API序列化使用ISO 8601格式
  4. 小心处理闰秒(GPS/TAI vs UTC)
  5. 根据用例考虑所需精度

相关资源