在分布式系统中经常有linux时间戳作为标记,linux时间与北京时间相互转换变得非常重要,可以快速的定位时间和问题。
关于时间格式的解释
UTC (Universal Time Coordinated,UTC)世界协调时间
CST (China Standard Time UTC+8:00)中国沿海时间(北京时间)
GMT (Greenwich Mean Time)格林威治标准时间:
1、分别以标准格式和时间戳来显示当前时间
[root@linux ~]# date
2010年 08月 10日 星期二 03:39:21 CST
[root@linux ~]# date
2010年 08月 10日 星期二 03:39:21 CST
[root@linux ~]# date +%s
1281382775
2、显示指定时间的时间戳
[root@linux ~]# date -d "2010-07-20 10:25:30" +%s
1279592730
[root@linux ~]# date -d "2010-07-20 10:25:30" +%s
1279592730
3、将时间戳转换为标准时间格式
方法1:使用date命令
[root@linux ~]# date -d "@1279592730"
2010年 07月 20日 星期二 10:25:30 CST
[root@linux ~]# date -d "1970-01-01 utc 1279592730 seconds"
2010年 07月 20日 星期二 10:25:30 CST
在线的转换工具地址为:http://tool.chinaz.com/Tools/unixtime.aspx
如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?
Java | time |
JavaScript | Math.round(new Date().getTime()/1000) getTime()返回数值的单位是毫秒 |
Microsoft .NET / C# | epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000 |
MySQL | SELECT unix_timestamp(now()) |
Perl | time |
PHP | time() |
PostgreSQL | SELECT extract(epoch FROM now()) |
Python | 先 import time 然后 time.time() |
Ruby | 获取Unix时间戳:Time.now 或 Time.new 显示Unix时间戳:Time.now.to_i |
SQL Server | SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE()) |
Unix / Linux | date +%s |
VBScript / ASP | DateDiff("s", "01/01/1970 00:00:00", Now()) |
其他操作系统 (如果Perl被安装在系统中) | 命令行状态:perl -e "print time" |
如何在不同编程语言中实现Unix时间戳(
Unix timestamp) → 普通时间?
Java | String date = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date(Unix timestamp * 1000)) |
JavaScript | 先 var unixTimestamp = new Date(Unix timestamp * 1000) 然后commonTime = unixTimestamp.toLocaleString() |
Linux | date -d @Unix timestamp |
MySQL | from_unixtime(Unix timestamp) |
Perl | 先 my $time = Unix timestamp 然后 my ($sec, $min, $hour, $day, $month, $year) = (localtime($time))[0,1,2,3,4,5,6] |
PHP | date('r', Unix timestamp) |
PostgreSQL | SELECT TIMESTAMP WITH TIME ZONE 'epoch' + Unix timestamp) * INTERVAL '1 second'; |
Python | 先 import time 然后 time.gmtime(Unix timestamp) |
Ruby | Time.at(Unix timestamp) |
SQL Server | DATEADD(s, Unix timestamp, '1970-01-01 00:00:00') |
VBScript / ASP | DateAdd("s", Unix timestamp, "01/01/1970 00:00:00") |
其他操作系统 (如果Perl被安装在系统中) | 命令行状态:perl -e "print scalar(localtime(Unix timestamp))" |
如何在不同编程语言中实现普通时间 → Unix时间戳(
Unix timestamp)?
Java | long epoch = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse("01/01/1970 01:00:00"); |
JavaScript | var commonTime = new Date(Date.UTC(year, month - 1, day, hour,minute, second)) |
MySQL | SELECT unix_timestamp(time) 时间格式: YYYY-MM-DD HH:MM:SS 或 YYMMDD 或 YYYYMMDD |
Perl | 先 use Time::Local 然后 my $time = timelocal($sec, $min, $hour, $day, $month, $year); |
PHP | mktime(hour, minute, second, day, month, year) |
PostgreSQL | SELECT extract(epoch FROM date('YYYY-MM-DD HH:MM:SS')); |
Python | 先 import time 然后 int(time.mktime(time.strptime('YYYY-MM-DD HH:MM:SS', '%Y-%m-%d %H:%M:%S'))) |
Ruby | Time.local(year, month, day, hour, minute, second) |
SQL Server | SELECT DATEDIFF(s, '1970-01-01 00:00:00', time) |
Unix / Linux | date +%s -d"Jan 1, 1970 00:00:01" |
VBScript / ASP | DateDiff("s", "01/01/1970 00:00:00", time) |
参考资料: