现在的 Unix 时间戳:
现在的北京时间:
现在的 UTC 时间:
时间戳 秒
北京时间(YYYY/MM/dd HH:mm:ss) 秒
北京时间 年 月 日 时 分 秒
最近在做时间相关的功能,涉及到换算各个时区,干脆写了一个时间戳和北京时间转换的一个小工具,如上。顺便总结下几种语言在时间方面的操作
获取时间戳
Javascript
1 | var timestamp = Date.parse(new Date()); // ==> 1512825782000 |
三个方法都可以获取时间戳,不同的地方在于第一种方法精确到秒,毫秒为用 0 补全,剩下两种方法结果是一致的
Java
1 | import java.util.Date; |
三个方法返回的结果是一致的,都精确到毫秒数。效率方面方法 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
33Date.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 | Math.round(new Date('2017-12-10 10:21:12').getTime()/1000) |