unix时间转换北京时间怎么算?unix时间戳转北京时间
js时间戳怎么转成日期格式
调用 getSmpFormatDateByLong(long,true)
long是时间戳
true表示获取到的结果是 yyyy-MM-dd hh:mm:ss格式
false则得到的事 yyyy-MM-dd格式
Date.prototype.format=function(format){
varo={
"M+":this.getMonth()+1,
"d+":this.getDate(),
"h+":this.getHours(),
"m+":this.getMinutes(),
"s+":this.getSeconds(),
"q+":Math.floor((this.getMonth()+3)/3),
"S":this.getMilliseconds()
}
if(/(y+)/.test(format)){
format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length));
}
for(varkino){
if(newRegExp("("+k+")").test(format)){
format=format.replace(RegExp.$1,RegExp.$1.length==1?o[k]:("00"+o[k]).substr((""+o[k]).length));
}
}
returnformat;
}
/**
*转换日期对象为日期字符串
*@paramdate日期对象
*@paramisFull是否为完整的日期数据,
*为true时,格式如"2000-03-0501:05:04"
*为false时,格式如"2000-03-05"
*@return符合要求的日期字符串
*/
functiongetSmpFormatDate(date,isFull){
varpattern="";
if(isFull==true||isFull==undefined){
pattern="yyyy-MM-ddhh:mm:ss";
}else{
pattern="yyyy-MM-dd";
}
returngetFormatDate(date,pattern);
}
/**
*转换当前日期对象为日期字符串
*@paramdate日期对象
*@paramisFull是否为完整的日期数据,
*为true时,格式如"2000-03-0501:05:04"
*为false时,格式如"2000-03-05"
*@return符合要求的日期字符串
*/
functiongetSmpFormatNowDate(isFull){
returngetSmpFormatDate(newDate(),isFull);
}
/**
*转换long值为日期字符串
*@paramllong值
*@paramisFull是否为完整的日期数据,
*为true时,格式如"2000-03-0501:05:04"
*为false时,格式如"2000-03-05"
*@return符合要求的日期字符串
*/
functiongetSmpFormatDateByLong(l,isFull){
returngetSmpFormatDate(newDate(l),isFull);
}
/**
*转换long值为日期字符串
*@paramllong值
*@parampattern格式字符串,例如:yyyy-MM-ddhh:mm:ss
*@return符合要求的日期字符串
*/
functiongetFormatDateByLong(l,pattern){
returngetFormatDate(newDate(l),pattern);
}
/**
*转换日期对象为日期字符串
*@paramllong值
*@parampattern格式字符串,例如:yyyy-MM-ddhh:mm:ss
*@return符合要求的日期字符串
*/
functiongetFormatDate(date,pattern){
if(date==undefined){
date=newDate();
}
if(pattern==undefined){
pattern="yyyy-MM-ddhh:mm:ss";
}
returndate.format(pattern);
}
//alert(getSmpFormatDateByLong(1279829423000,false));
双系统windows时间不准
出现这种情况的原因是由于两种系统在设定时间时均以主板CMOS中的时间为依据,却又使用不同的时间计算标准。具体来说:
Linux和苹果操作系统(UNIX变种)以当前主板CMOS时间做为国际协调时间(UTC),再根据系统设置的时区来最终确定当前系统时间。比如时区设置为UTC+8(北京时间)而当前CMOS时间为02:00,那么系统会将这两个时间相加,显示在桌面的当前系统时间为10:00。而Windows操作系统则直接把CMOS时间认定为当前显示时间,不根据时区转换。
* Windows把系统硬件时间当作本地时间(Local Time),即操作系统中显示的时间跟CMOS中显示的时间是一样的。
* Linux/Unix/Mac把CMOS时间当作UTC,操作系统中显示的时间是硬件时间经过换算得来的,比如说北京时间是UTC+8,则系统中显示时间是CMOS时间+8。
这样,当电脑中同时有多系统时,就出现了问题。假如你的Linux和Windows中设置的时区都为北京时间东八区,而你在Linux中把当前系统时间更改为10:00,则此时硬件中存储的实际是UTC时间02:00。这时你重启进入Windows后,你会发现windows系统中显示的时间是 02:00,比Linux中慢了八个小时。同理,你在Windows中更改或用网络同步了系统时间后,再到Linux中去看,系统就会快了8小时。那怎么来解决这种冲突呢?一种就是让Windows把CMOS时间当作UTC,与Linux/Unix/Mac保持一致。另一种就是让Linux/Unix/Mac把系统时间当作本地时间,与Windows保持一致。
一、下面先介绍修改windows的设置,(以Windows7 64-bit为例):
使用组合键Win+R打开运行窗口,输入regedit回车,找到“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation”,右键新建New> DWORD(32-bit) Value,命名为RealTimeIsUniversal,键值为1