现在的 Unix 时间戳:
现在的北京时间:
现在的 UTC 时间:
时间戳 秒
北京时间(YYYY/MM/dd HH:mm:ss) 秒
北京时间 年 月 日 时 分 秒



最近在做时间相关的功能,涉及到换算各个时区,干脆写了一个时间戳和北京时间转换的一个小工具,如上。顺便总结下几种语言在时间方面的操作

获取时间戳

Javascript

1
2
3
var timestamp = Date.parse(new Date());     // ==> 1512825782000
var timestamp = (new Date()).valueOf(); // ==> 1512825782232
var timestamp=new Date().getTime(); // ==> 1512825782232

三个方法都可以获取时间戳,不同的地方在于第一种方法精确到秒,毫秒为用 0 补全,剩下两种方法结果是一致的

Java

1
2
3
4
5
6
7
import java.util.Date;
import java.util.Calendar;


System.currentTimeMillis() // 1 ==> 1512896121862
new Date().getTime() // 2 ==> 1512896121862
Calendar.getInstance().getTimeInMillis()// 3 ==> 1512896121862

三个方法返回的结果是一致的,都精确到毫秒数。效率方面方法 1 最快,因为是直接获取机器的时间。方法 3 最慢,因为需要处理时区的问题。

时间戳转系统时间

Javascript

1
new Date(timestamp * 1000);

这样获取到的时间是当前系统时区的时间,想要获取 UTC 时间需要手动算下偏移量

1
var offset = new Date().getTimezoneOffset()     // ==> -480 分钟

这个方法返回当前时区和 UTC 时间的偏移量,-480分钟 代表当前时区减去 480 分钟,即为 UTC 时间

1
new Date((ts + offset * 60) * 1000)             // ==> UTC 时间

Javascript 没有时间格式化方法,需要自己扩展,这个方法是从网上找的,相对其他方法是比较好的,推荐使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Date.prototype.format=function(fmt) {
var o = {
"M+" : this.getMonth()+1, //月份
"d+" : this.getDate(), //日
"h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时
"H+" : this.getHours(), //小时
"m+" : this.getMinutes(), //分
"s+" : this.getSeconds(), //秒
"q+" : Math.floor((this.getMonth()+3)/3), //季度
"S" : this.getMilliseconds() //毫秒
};
var week = {
"0" : "/u65e5",
"1" : "/u4e00",
"2" : "/u4e8c",
"3" : "/u4e09",
"4" : "/u56db",
"5" : "/u4e94",
"6" : "/u516d"
};
if(/(y+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
if(/(E+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "/u661f/u671f" : "/u5468") : "")+week[this.getDay()+""]);
}
for(var k in o){
if(new RegExp("("+ k +")").test(fmt)){
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
}
}
return fmt;
};

系统时间转时间戳

Javascript

1
2
Math.round(new Date('2017-12-10 10:21:12').getTime()/1000)
Math.round(new Date('2017/12/10 10:21:12').getTime()/1000)

其他语言

参考

03-16 19:08